次のスキーマは、my Android app。内のどこからでもアプリケーションコンテキストを取得する方法として宣伝されています。しかし、時々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;
}
}
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>
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">
次の方法を使用して、アプリケーションコンテキストを取得します。
_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()
を使用します
instance
は初期化されないため、デフォルト値はnull
です。これは、instance.getContext()
がNullPointerException
をスローすることを意味します。これを修正するには、instance
変数を初期化する必要があります。
現在、インスタンスを初期化していないため、デフォルトでその値はnullに設定されます。使用する前に値を割り当てる必要があります。