【发布时间】:2017-02-02 09:57:30
【问题描述】:
我正在尝试将自创对象的 ArrayList 放入 SharedPreferences 中。虽然保存似乎有效,但调用 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 至少不为空。为什么 gson 会“丢失”参考?
我看这个问题:Android ArrayList of custom objects - Save to SharedPreferences - Serializable? 我看到的唯一区别是我有一个 ArrayList
【问题讨论】:
标签: java android-studio nullpointerexception gson