2017-02-26 25 views
-2

修復:更改爲.equals而不是使用==。然後我將其更改爲subjects.isEmpty(),它也起作用。爲了記錄我的問題不是如何比較字符串。這恰好是我用我的代碼所遇到的問題。感謝大家的回覆!Arraylist嘗試添加項目後返回null

我有一個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錯誤:試圖調用虛擬方法java.lang.Object java.util.ArrayList.get(int)'在該行的空對象引用上

if(subjects.get(0) == 1){ 
+1

您需要先學習一些java的基礎知識...... Fx如何比較字符串 – Selvin

+1

@Selvin我不確定這是一個好的目標。 OP顯然有一個null變量,但我們沒有[mcve] –

+0

主題爲null,因爲它從未初始化,因爲缺少java的基礎知識(字符串比較) – Selvin

回答

0

我覺得你的問題在這裏:

if(jsonString == ""){ 
    subjects = new ArrayList<>(); 
    for(int i = 0; 34 > i; i++){ 
     subjects.add(0); 
    } 
} 

你正在初始化ArrayList。您不需要此行subjects = new ArrayList<>();,因爲您已經聲明ArrayList爲private ArrayList<Integer> subjects = new ArrayList<>();。所以,你應該能夠做到:

//You also need to use .equals() method to compare strings 
if(jsonString.equals("")){ 
    for(int i = 0; 34 > i; i++){ 
     subjects.add(0); 
    } 
} 

但是,沒有看到其全部的代碼,就很難說了。

+1

要添加到此,您也不要使用'=='比較字符串。你應該使用'jsonString.equals(「」)'。 –

+0

或者只是'isEmpty()' –

+0

我重新初始化了ArrayList,因爲當我沒有拋出錯誤。 – th3ramr0d

0

你正在調用方法得到在一個空對象。在你的問題中,你沒有指定運行該代碼的時間點,但是你在使用它之前忘記初始化ArrayList 主題,或者你爲該變量分配了一個空對象。

相關問題