しばらくこれに取り組んでいましたが、何が問題なのかわかりません。
ArrayList を JSON に保存しようとすると、NullPointerException が発生します。必ず、マークされている一番下までスキップしてください。
以前、JSON との間でオブジェクトを保存するために GSON を使用しましたが、それらは ArrayLists ではなくオブジェクト全体でした。
関連コード:
private static final String SHARED_PREFERENCES = "shared_preferences";
// Shared Preferences containing JSON object of saved usernames
SharedPreferences sharedPreferences;
// Saved usernames
ArrayList <String> savedUsernames;
onCreate()...
// Get sharedPreferences
sharedPreferences = this.getSharedPreferences(SHARED_PREFERENCES, Context.MODE_PRIVATE);
いずれかの方法で、savedUsernames が何かに初期化されていることを確認してください。
// If usernames are saved, initialize savedUsernames with them or else initiliaze blank but ready
if (sharedPreferences.contains(SAVED_NAMES))
{
getSavedUsernames();
}
else
{
savedUsernames = new ArrayList<String>();
}
現在表示されているユーザー名をsavedUsernames ArrayListに保存するボタンリスナー
case R.id.bSaveUsername:
// Add textview text to ArrayList
savedUsernames.add(tvCurrentUsername.getText().toString());
// Addition, add change for deletion
changeHasBeenMade = true;
// Toast for feedback
Toast.makeText(MainScreen.this, "Added to list", Toast.LENGTH_SHORT).show();
break;
各変更が行われると真になるブール値があります。これが onPause()
// If there is anything to save, save
if (changeHasBeenMade)
{
Toast.makeText(this, "Success", Toast.LENGTH_SHORT).show();
saveUsernames();
}
問題がある場所である saveUsernames() を呼び出す (下で強調表示されている行)
// On pause, saveUsernames
private void saveUsernames()
{
if (D) Log.i(TAG, "savedUsernames() start");
/**** PROBLEM LINE ****/
String savingNamesJSON = gson.toJson(savedUsernames);
/**** PROBLEM LINE ****/
// Create editor, save JSON string and commits
Editor editor = sharedPreferences.edit();
editor.putString(SAVED_NAMES, savingNamesJSON).commit();
if (D) Log.i(TAG, "savedUsernames() end");
}
お時間をありがとうございました!感謝します