2017-03-26 10 views
0

私はリストビューを含むカスタム配列に格納されたすべてのデータを持つ小さなアプリケーションを作成しようとしています。私は別の形式でデータを保存したくありません。この配列は共有の設定で保存するのが好きです。私は他の答えられた質問に目を向けると、さまざまな方法を試しましたが、その後私のために働いた人はいませんでした。主な活動で 共有の環境設定でカスタム配列を保存する

、私は二つの小さな方法があります:

public class MainActivity extends AppCompatActivity { 

public static ArrayList<Item> items = new ArrayList<Item>(); 
SharedPreferences mPrefs = getBaseContext().getSharedPreferences("KEY12", Context.MODE_PRIVATE); 
Gson gson = new Gson(); 

[...] 

protected void savePrefs() { 

    SharedPreferences.Editor editor = mPrefs.edit(); 
    String json = gson.toJson(items); 
    System.out.println(json); 
    editor.putString("items_prefs", json); 
    editor.commit(); 

} 

protected void loadPrefs() { 

    String empty_list = gson.toJson(new ArrayList<Item>()); 

    items = gson.fromJson(mPrefs.getString("KEY12", empty_list), 
      new TypeToken<ArrayList<Item>>() {}.getType()); 


} 
} 

私は戻ってメインの活動に来るとき、私はそう毎回onResumeでloadPrefs();のonCreate方法及びsavePrefs();を呼んでいるが、好みはする必要があります更新しました。

私が手にエラーがある:

致命的な例外:メイン プロセス:com.example.android.calc123、PID:30579 java.lang.RuntimeException:活性ComponentInfo {com.exampleをインスタンス化することができません。 android.calc123/com.example.android.calc123.MainActivity}:java.lang.NullPointerException:仮想メソッド 'android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang.String、int)'を呼び出しようとしていますヌルオブジェクト参照 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2548) android.app.ActivityThread.handle LaunchActivity(ActivityThread.java:2707) android.app.ActivityThread.-wrap12(ActivityThread.java) (android.app.ActivityThread)$ H.handleMessage(ActivityThread.java:1460) android.os.Handler.dispatchMessage (Handler.java:102) とandroid.os.Looper.loop(Looper.java:154) とandroid.app.ActivityThread.main(ActivityThread.java:6077) at java.lang.reflect.Method.invoke (ネイティブメソッド) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:865) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) Caus ed:java.lang.NullPointerException:NULLオブジェクト参照で仮想メソッド 'android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang.String、int)'を呼び出そうとしました at com.example.android。 calc123.MainActivity。(MainActivity.java:61) java.lang.Class.newInstance(ネイティブメソッド) でandroid.app.Instrumentation.newActivity(Instrumentation.java:1078) でandroid.app.ActivityThread.performLaunchActivityで( ActivityThread.java:2538) android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) android.app.ActivityThread.-wrap12(ActivityThread.java) android.app.ActivityThread $ H。あなたとandroid.os.Handler.dispatchMessage(Handler.java:102)の のハンドルメッセージ(ActivityThread.java:1460) android.os.Looper.loop(Looper.java:154) android.app.ActivityThread.main ActivityThread.java:6077) at java.lang.reflect.Method.invoke(ネイティブメソッド) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:865) at com.android.internal .os.ZygoteInit.main(ZygoteInit.java:755)

この問題を解決するにはどうしたらいいですか - 別の方法で質問してください - 共有環境設定を扱うときに何が間違っていますか?

答えて

0

エラーログを使用すると、OnCreateのmPrefs = getBaseContext().getSharedPreferences("KEY12", Context.MODE_PRIVATE);

プットあなたの答えのための

+0

感謝をNULLポインタ(getBaseContext)でgetSharedPreferencesを呼び出す言うように、残念ながら私はまだNULLポインタでエラーが出る... – xilef97

+0

てみてください'getApplicationContext()'を使ってください。おそらくコンテキストがnullであるためです。 –

+0

getBaseContext()を削除します。アクティビティコンテキスト –

関連する問題