Получить контекст приложения возвращает значение 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. Вам необходимо присвоить ему значение, прежде чем вы сможете его использовать.