Получить контекст приложения возвращает значение null
Следующая схема была рекламирована как способ получить контекст приложения из любого места моего приложения для Android. Но иногда выполнение MyApp.getContext()
возвращает null. Я попытался изменить схему, удалив static
из getContext()
, чтобы я сделал MyApp.getInstance().getContext()
. Он по-прежнему возвращает null. Как это исправить? Как получить контекст приложения из любого места в моем приложении?
public class MyApp extends Application {
private static MyApp instance;
public static MyApp getInstance() {
return instance;
}
public static Context getContext() {
return instance.getApplicationContext();
}
@Override
public void onCreate() {
super.onCreate();
instance = this;
}
}
Ответы
Ответ 1
Создайте в onCreate()
экземпляр getApplicationContext()
(mContext
), затем вызовите MyApp.getContext()
всюду в своем приложении, и вы получите статический контекст вашего приложения.
public class MyApp extends Application {
//private static MyApp instance;
private static Context mContext;
public static MyApp getInstance() {
return instance;
}
public static Context getContext() {
// return instance.getApplicationContext();
return mContext;
}
@Override
public void onCreate() {
super.onCreate();
// instance = this;
mContext = getApplicationContext();
}
}
Не забудьте объявить в свой AndroidManifest.xml
<application android:name="com.mypackage.mypackage.MyApp">
...
...
...
</application>
Ответ 2
Создайте статический экземпляр Context
в OnCreate
и сохраните его, пока вы не захотите его получить.
метод геттера getContext()
Из класса Application
:
public class MyApp extends Application {
private static Context sContext;
@Override
public void onCreate() {
sContext = getApplicationContext();
super.onCreate();
}
public static Context getContext() {
return sContext;
}
}
Объявите его в Manifest
:
<application android:name="com.package.name.MyApp">
Ответ 3
Используйте следующий способ для получения контекста приложения.
public class MyApp extends Application {
private static MyApp mAppInstance=null;
public static Context appContext;
public static MyApp getInstance() {
return mAppInstance;
}
public static MyApp get() {
return get(appContext);
}
public static MyApp get(Context context) {
return (MyApp) context.getApplicationContext();
}
@Override
public void onCreate() {
super.onCreate();
mAppInstance=this;
appContext=getApplicationContext();
}
}
добавьте имя приложения внутри файла Манифест
<application android:name="packagename.MyApp"/>
чтобы использовать контекст
MyApp.getInstance().getApplicationContext()
Ответ 4
instance
никогда не инициализируется и поэтому имеет значение по умолчанию null
. Это означает, что instance.getContext()
будет бросать NullPointerException
. Чтобы исправить это, вам нужно инициализировать переменную instance
.
Ответ 5
В настоящее время вы не инициализировали экземпляр, и по умолчанию значение теперь будет иметь значение null. Вам необходимо присвоить ему значение, прежде чем вы сможете его использовать.