私はAndroidアプリケーションを開発しています。私の質問は、抽象クラスでアプリケーションコンテキストを取得できますか?コンテキスト変数のnullポインター例外が発生します。これは、抽象クラス内で使用していることが原因である可能性があります。
注:私のコードには、他のクラス(Activites)をインスタンス化するために使用する抽象クラス(抽象クラス自体がActivityを拡張する)があります。抽象クラスでは、アクティビティヘルパーのインスタンスを作成します。これは、アプリの一般的なアクティビティ関連の機能を処理するクラスです。これは私のアクティビティヘルパークラスです:
public class ActivityHelper {
protected Activity mActivity;
public static ActivityHelper createInstance(Activity activity, Context context) {
return UIUtils.isTablet(context) ?
new ActivityHelperTablet(activity) :
new ActivityHelper(activity);
}
protected ActivityHelper(Activity activity) {
mActivity = activity;
}
}
関数isTabletは、抽象クラスで作成したコンテキスト変数を受け取ります。
public static boolean isTablet(Context context) {
// Can use static final constants like HONEYCOMB, declared in later versions
// of the OS since they are inlined at compile time.
return isHoneycomb() ||
((context.getResources().getConfiguration().screenLayout &
Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE);
}
BaseActivityの重要な部分:
public abstract class BaseActivity extends Activity {
Context context = this.getApplicationContext();
final ActivityHelper mActivityHelper = ActivityHelper.createInstance(this, context);
}
しかし、それは私にnullポインタ例外を与えます。だから、抽象クラスのせいかと思いました。そしてこれはログです:
06-12 15:59:56.011: E/AndroidRuntime(1206): Caused by: java.lang.NullPointerException
06-12 15:59:56.011: E/AndroidRuntime(1206): at
android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:101)
06-12 15:59:56.011: E/AndroidRuntime(1206): at
com.navayo.sec.voip.activities.BaseActivity.<init>(BaseActivity.java:35)
06-12 15:59:56.011: E/AndroidRuntime(1206): at
com.navayo.sec.voip.activities.MainActivity.<init>(MainActivity.java:43)
06-12 15:59:56.011: E/AndroidRuntime(1206): at
java.lang.Class.newInstanceImpl(Native Method)
06-12 15:59:56.011: E/AndroidRuntime(1206): at
java.lang.Class.newInstance(Class.java:1319)
06-12 15:59:56.011: E/AndroidRuntime(1206): at
android.app.Instrumentation.newActivity(Instrumentation.java:1023)
06-12 15:59:56.011: E/AndroidRuntime(1206): at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1870)