0

有一段时间了,似乎看不出问题出在哪里。

尝试将 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");
}

非常感谢您的时间!欣赏它

4

0 回答 0