我正在尝试将自创建对象的 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 是什么,但我不明白为什么在这种情况下会收到一个 NullPointerException 异常,因为我在执行之前检查了 String jsonMovieModelList 至少不为空。为什么 gson “丢失”引用?
我看这个问题:Android ArrayList of custom objects - Save to SharedPreferences - Serializable?我看到的唯一区别是我有一个 ArrayList
最佳答案
似乎您在此方法中使用变量gson
之前尚未对其进行初始化。只需在第一次使用之前添加 Gson gson = new GsonBuilder().create();
,或者在您调用的此方法中添加即可修复该问题。
关于java - Gson 和 SharedPreferences 导致 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39679420/