0

しばらくこれに取り組んでいましたが、何が問題なのかわかりません。

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

お時間をありがとうございました!感謝します

4

0 に答える 0