java - Gson 和 SharedPreferences 导致 NullPointerException

标签 java android-studio nullpointerexception gson

我正在尝试将自创建对象的 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/

相关文章:

java - 什么是NullPointerException,我该如何解决?

java - 热部署后未知实体 bean 类 : netbeans 6. 9 + glassfish 2.1 + eclipselink jpa 2.0

java - 类加载器如何找到类

intellij-idea - Android Studio 未显示快速修复灯泡

kotlin - 尝试使用 Ktor 设置 OAuth,providerLookup 问题

java - 我收到空指针异常,但找不到原因

java - ORA-00933 : SQL command not properly ended in PreparedStatement

java - 如何根据条件关闭 Java ScheduledExecutorService?

android - 当我打开我的项目时,它会出现这个错误非零退出值 126,如何解决这个问题?

java - android studio Viewpager OnClickListener 不工作