0

私はJavaでの開発に不慣れです。SharedPreferencesを使用したアプリを作成しています。私が使用した特定のチュートリアルは次のとおりです。http:
//blog.donnfelker.com/2011/02/17/android-a-simple-eula-for-your-android-apps/
コードを少し変更しましたが、それは私にエラーを与えています:

public class SimpleEula extends Application {
    private String EULA_PREFIX = "eula";
    public Activity mActivity;

    public SimpleEula(Activity context) {
        mActivity = context;
    }

    public void showEula() {
        SharedPreferences sh_showEula;
        final String eulaKey = EULA_PREFIX;
        final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mActivity);
        ...

すべての行の後にコードをログに記録すると、アプリが次の場所でクラッシュします。

    final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mActivity);

行を次のように変更しても:

    final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

まだクラッシュします。何が問題なのかわかりません。誰かが私を助けてもらえますか?

事前に感謝します


編集:
これらはLogCatのエラーです:

08-21 20:44:58.905: E/AndroidRuntime(610): FATAL EXCEPTION: main
08-21 20:44:58.905: E/AndroidRuntime(610): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.test.test/com.test.test.MainActivity}: java.lang.NullPointerException
08-21 20:44:58.905: E/AndroidRuntime(610):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
08-21 20:44:58.905: E/AndroidRuntime(610):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
08-21 20:44:58.905: E/AndroidRuntime(610):  at android.app.ActivityThread.access$600(ActivityThread.java:123)
08-21 20:44:58.905: E/AndroidRuntime(610):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
08-21 20:44:58.905: E/AndroidRuntime(610):  at android.os.Handler.dispatchMessage(Handler.java:99)
08-21 20:44:58.905: E/AndroidRuntime(610):  at android.os.Looper.loop(Looper.java:137)
08-21 20:44:58.905: E/AndroidRuntime(610):  at android.app.ActivityThread.main(ActivityThread.java:4424)
08-21 20:44:58.905: E/AndroidRuntime(610):  at java.lang.reflect.Method.invokeNative(Native Method)
08-21 20:44:58.905: E/AndroidRuntime(610):  at java.lang.reflect.Method.invoke(Method.java:511)
08-21 20:44:58.905: E/AndroidRuntime(610):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
08-21 20:44:58.905: E/AndroidRuntime(610):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
08-21 20:44:58.905: E/AndroidRuntime(610):  at dalvik.system.NativeStart.main(Native Method)
08-21 20:44:58.905: E/AndroidRuntime(610): Caused by: java.lang.NullPointerException
08-21 20:44:58.905: E/AndroidRuntime(610):  at android.preference.PreferenceManager.getDefaultSharedPreferencesName(PreferenceManager.java:371)
08-21 20:44:58.905: E/AndroidRuntime(610):  at android.preference.PreferenceManager.getDefaultSharedPreferences(PreferenceManager.java:366)
08-21 20:44:58.905: E/AndroidRuntime(610):  at com.test.test.SimpleEula.show(SimpleEula.java:23)
08-21 20:44:58.905: E/AndroidRuntime(610):  at com.test.test.MainActivity.onCreate(MainActivity.java:26)
08-21 20:44:58.905: E/AndroidRuntime(610):  at android.app.Activity.performCreate(Activity.java:4465)
08-21 20:44:58.905: E/AndroidRuntime(610):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
08-21 20:44:58.905: E/AndroidRuntime(610):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
08-21 20:44:58.905: E/AndroidRuntime(610):  ... 11 more
4

2 に答える 2

0

NullPointerExepter は、Activity または Application クラスを拡張することによって発生します。このコードは機能します:

public class SimpleEula {

    private String EULA_PREFIX = "eula";
    private Activity mActivity;

    public SimpleEula(Activity context) {
        mActivity = context;
    }

    public void show() {
        final String eulaKey = EULA_PREFIX;
        final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mActivity);
            ...

今では動作します。ご協力ありがとうございました

于 2012-08-22T10:52:22.987 に答える
0

getApplicationContext()Application クラスに使用してみてください。

SharedPreferences prefs = PreferenceManager.
                                   getDefaultSharedPreferences(getApplicationContext());

私がやること、

public class SimpleEula extends Application {
    private Context mContext;

    @Override
    public void onCreate() {
        super.onCreate();

        mContext = this; // use this mContext
    }

    public void showEula() {
          SharedPreferences prefs = PreferenceManager.
                                   getDefaultSharedPreferences(mContext);
    }
}
于 2012-08-21T17:37:56.417 に答える