簡體   English   中英

Gson和SharedPreferences導致NullPointerException

[英]Gson & SharedPreferences lead to a NullPointerException

我正在嘗試在SharedPreferences中放置一個自己創建的對象的ArrayList。 盡管保存工作似乎可行,但在調用getSharedPreferences()時出現以下錯誤:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object com.google.gson.Gson.fromJson(java.lang.String, java.lang.reflect.Type)' on a null object reference

我將其放入SharedPreferences中的代碼:

// FYI: gson = new Gson(); is set earlier on
// same goes for: ArrayList<MovieModel> movieModelList = new ArrayList<>();
// and: Type listType;

movieModelList.add(result);

String jsonMovieModelList = gson.toJson(movieModelList);

SharedPreferences prefs = getSharedPreferences("settings",
   MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("jsonMovieModelList", jsonMovieModelList);
editor.apply();

和SharedPreferences類:

public void getSharedPreferences() {
    SharedPreferences prefs = getSharedPreferences("settings",
            MODE_PRIVATE);

    String jsonMovieModelList = prefs.getString("jsonMovieModelList", null);
    Log.d("TAG", "Message" + jsonMovieModelList); // output is as expected

    // if not filled in, no action necessary
    if (jsonMovieModelList != null) {

        listType = new TypeToken<ArrayList<MovieModel>>(){}.getType();
        ArrayList<MovieModel> movieModelListSaved = gson.fromJson(jsonMovieModelList, listType);

        MovieModel lastMovie = movieModelListSaved.get(movieModelListSaved.size() - 1);

        showTitleSecond = (TextView)findViewById(R.id.show_title_2);
        showTitleSecond.setText(lastMovie.getTitle());
    }
}

gson代碼基於: https ://google.github.io/gson/apidocs/com/google/gson/Gson.html

需要明確的是:我確實理解了NullPointerException是什么,但是我不明白為什么在這種情況下會收到一個,因為我在執行String jsonMovieModelList至少不為null之前進行了檢查。 為什么gson“失去了”參考?

我看這個問題: 自定義對象的Android ArrayList-保存到SharedPreferences-可序列化? 我看到的唯一區別是我有一個ArrayList

似乎您尚未在此方法中使用變量gson之前對其進行初始化。 只需添加Gson gson = new GsonBuilder().create(); 在第一次使用之前,或者在您要使用的此方法中調用,都應該對其進行修復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM