我试图在SharedPreferences中放置自创对象的ArrayList。虽然储蓄似乎工作,我得到的时候getSharedPreferences()被调用以下错误:Gson&SharedPreferences导致NullPointerException
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,但我不明白为什么我会在这种情况下收到一个,因为我在执行之前检查字符串jsonMovieModelList至少不为null。为什么gson'失去'参考?
我看这个问题:Android ArrayList of custom objects - Save to SharedPreferences - Serializable?,我看到唯一的区别是,我有一个ArrayList
感谢您的期待,但是,正如我在注释行中所述,我使用gson = new Gson()初始化gson。任何其他建议? – CorneeldH
Uhm,显示整个代码,也许变量范围与此有关... – Vucko
阅读您的评论并重新阅读您的答案,您是对的!在getSharedPreferences中,我没有初始化gson,并且在重新启动应用程序之前加载此方法。所以,从我身边道歉,并感谢您的答复+评论:) – CorneeldH