web-dev-qa-db-ja.com

アプリケーションコンテキストの取得がnullを返す

次のスキーマは、my Android app。内のどこからでもアプリケーションコンテキストを取得する方法として宣伝されています。しかし、時々MyApp.getContext()を実行するとnullが返されます。staticgetContext()から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;
    }
}
23
learner

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>
44
Jorgesys

ContextOnCreateの静的インスタンスを作成し、ゲッターメソッド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">
10
Sami Eltamawy

次の方法を使用して、アプリケーションコンテキストを取得します。

_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();

    }
}
_

Manifestファイル内にアプリケーション名を追加します

_<application Android:name="packagename.MyApp"/>
_

コンテキストを取得するには、MyApp.getInstance().getApplicationContext()を使用します

2
Ankit Yadav

instanceは初期化されないため、デフォルト値はnullです。これは、instance.getContext()NullPointerExceptionをスローすることを意味します。これを修正するには、instance変数を初期化する必要があります。

1
Code-Apprentice

現在、インスタンスを初期化していないため、デフォルトでその値はnullに設定されます。使用する前に値を割り当てる必要があります。

0
ucsunil