私はリストビューを含むカスタム配列に格納されたすべてのデータを持つ小さなアプリケーションを作成しようとしています。私は別の形式でデータを保存したくありません。この配列は共有の設定で保存するのが好きです。私は他の答えられた質問に目を向けると、さまざまな方法を試しましたが、その後私のために働いた人はいませんでした。主な活動で 共有の環境設定でカスタム配列を保存する
、私は二つの小さな方法があります: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)
この問題を解決するにはどうしたらいいですか - 別の方法で質問してください - 共有環境設定を扱うときに何が間違っていますか?
感謝をNULLポインタ(getBaseContext)でgetSharedPreferencesを呼び出す言うように、残念ながら私はまだNULLポインタでエラーが出る... – xilef97
てみてください'getApplicationContext()'を使ってください。おそらくコンテキストがnullであるためです。 –
getBaseContext()を削除します。アクティビティコンテキスト –