有一段时间了,似乎看不出问题出在哪里。
尝试将 ArrayList 保存到 JSON 时,我收到 NullPointerException,一定要跳到标记它的底部。
我以前使用 GSON 将对象保存到 JSON 和从 JSON 保存对象,但它们是整个对象而不是 ArrayLists..
相关代码:
private static final String SHARED_PREFERENCES = "shared_preferences";
// Shared Preferences containing JSON object of saved usernames
SharedPreferences sharedPreferences;
// Saved usernames
ArrayList <String> savedUsernames;
在创建()...
// 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");
}
非常感谢您的时间!欣赏它