Android: как использовать getApplication и getApplicationContext из класса non activity/service
Я использую расширение класса приложения на Android для обмена моими данными по всему приложению.
Я могу использовать метод getApplication()
из всех моих действий.
Однако существуют определенные пользовательские классы-помощники, которые я создал; например, класс XMLHelper
, который не наследуется от какого-либо класса активности/обслуживания.
Здесь метод getApplication()
недоступен.
Как мне разобраться в этом и каковы наилучшие методы проектирования, чтобы решить эту проблему?
Ответы
Ответ 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);
}
}