【发布时间】:2017-07-17 10:42:17
【问题描述】:
已修复:更改为 .equals 而不是使用 ==。然后我将其更改为 subject.isEmpty() 并且效果也很好。为了记录,我的问题不是我如何比较字符串。这恰好是我的代码遇到的问题。感谢大家的回复!
我有一个 ArrayList,我从 sharedprefs 作为字符串加载并将其转换回 ArrayList。当我加载它时,我会检查它是否为空。如果它是空的,我会用 34 个对象填充它。然后我尝试使用 ArrayList 但我得到一个空对象引用。
我在 onCreate 之外声明我的变量
private ArrayList<Integer> subjects = new ArrayList<>();
当我运行这段代码时,我得到了错误
private void setupSubjects(){
SharedPreferences sharedPrefs = this.getActivity().getSharedPreferences(viewPressed, Context.MODE_PRIVATE);
Gson gson = new Gson();
String jsonString = new String();
jsonString = sharedPrefs.getString("Subjects", jsonString);
Type type = new TypeToken<ArrayList<Integer>>() {}.getType();
subjects = gson.fromJson(jsonString, type);
if(jsonString == ""){
for(int i = 0; 33 < i; i++){
subjects.add(0);
}
}
if(subjects.get(0) == 1){
questionsString = getResources().getStringArray(R.array.question);
answersString = getResources().getStringArray(R.array.answer);
questionsLoaded = new ArrayList<>(Arrays.asList(questionsString));
answersLoaded = new ArrayList<>(Arrays.asList(answersString));
randomizeSubjects();
}
}
我得到一个 java.lang.NullPointerException: Attempt to call virtual method 'java.lang.Object java.util.ArrayList.get(int)' on an null object reference on this line
if(subjects.get(0) == 1){
【问题讨论】:
-
你需要先学习一些java的基础知识... Fx 如何比较字符串
-
@Selvin 我不确定这是一个好的目标。 OP 显然在某处有一个空变量,但我们没有 minimal reproducible example
-
subjects 为空,因为它从未初始化过,因为缺乏 java 的基础知识(字符串比较)
-
@Selvin 为什么没有初始化?
subjects = gson.fromJson(jsonString, type); -
因为
subjects = new ArrayList<>();在里面 if... Rest 是不相关的... 并且修复比较会修复 npe... 但不是整个代码
标签: android nullpointerexception gson sharedpreferences