Подтвердить что ты не робот

Android: как использовать getApplication и getApplicationContext из класса non activity/service

Я использую расширение класса приложения на Android для обмена моими данными по всему приложению.

Я могу использовать метод getApplication() из всех моих действий.

Однако существуют определенные пользовательские классы-помощники, которые я создал; например, класс XMLHelper, который не наследуется от какого-либо класса активности/обслуживания.

Здесь метод getApplication() недоступен.

Как мне разобраться в этом и каковы наилучшие методы проектирования, чтобы решить эту проблему?

4b9b3361

Ответ 1

Метод getApplication() находится в классе Activity, поэтому вы не можете получить к нему доступ из своего вспомогательного класса.

Если вам действительно нужен доступ к вашему контексту приложения из вашего помощника, вы должны провести ссылку на контекст активности и передать его при вызове помощнику.

Ответ 2

Метод getApplication() находится в классе Activity, поэтому всякий раз, когда вы хотите getApplication() в классе non -активности, вы должны передать экземпляр Activity в конструктор этого класса неактивности.

предположим, что тест - это мой класс неактивности:

Test test = new Test(this);

В этом классе я создал один конструктор:

 public Class Test
 {
    public Activity activity;
    public Test (Activity act)
    {
         this.activity = act;
         // Now here you can get getApplication()
    }
 }

Ответ 3

Передача объекта контекста объекту Activity компилируется.

Попробуйте следующее:

((Activity) mContext).getApplication(...)

Ответ 4

Либо перейдите в контекст (так что вы можете получить доступ к ресурсам), либо сделайте вспомогательные методы статическими.

Ответ 5

Чтобы избежать этого аргумента, я использую класс, полученный из приложения

public class MyApplication extends Application {

private static Context sContext;

@Override
public void onCreate() {
    super.onCreate();
    sContext=   getApplicationContext();

}

public static Context getContext() {
    return sContext;
}

и вызовите MyApplication.getContext() в классах помощника

Ответ 6

Отправка контекста активности другим классам может привести к ошибкам памяти, поскольку сохранение этого контекста является причиной того, что GC не может распоряжаться объектом

Ответ 7

попробуйте это, вызывая активность в конструкторе

public class WebService {
private Activity activity;

        public WebService(Activity _activity){
            activity=_activity;
            helper=new Helper(activity);

        }
}