2017-02-25 79 views
1

我是Android編程的新手,因此您需要耐心等待。由於ArrayAdapter的Array爲null導致應用程序崩潰

我試圖從解析服務器中檢索一列並將其顯示在ListView中。到目前爲止,我已經產生了下面的代碼,但是我遇到了一個問題。在我的for循環中,它應該從「Absences」類的「name」列中獲取每個項目,並將其添加到名爲「teachers」的ArrayList中。

問題是應用程序崩潰,因爲該數組爲null(在打印到日誌中),因此無法將其分配給ArrayAdapter。我相信這樣做的原因是在arrayadapter代碼執行後的一段時間內,對象會在背景中被取出,這意味着它試圖顯示一個空數組。

我假設我需要以某種方式推遲它 - 關於我該怎麼做的任何想法?

的onCreate()方法中受影響的代碼:

final ArrayList<String> teachers = new ArrayList<String>(); 

    ParseQuery<ParseObject> query = ParseQuery.getQuery("Absences"); 

    query.findInBackground(new FindCallback<ParseObject>() { 
     @Override 
     public void done(List<ParseObject> objects, ParseException e) { 
      if(e == null){ 

       for(ParseObject object : objects){ 

        String name = String.valueOf(object.get("name")); 
        Log.i("teacherName", name); 
        teachers.add(name); 

       } 

      } else { 

       Log.i("Get data from parse", "There was an error getting data!"); 
       e.printStackTrace(); 

      } 
     } 
    }); 

    Log.i("teacherOutput", teachers.toString()); 

    final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, teachers); 

    ListView lv = (ListView)findViewById(R.id.listView); 

    lv.setAdapter(arrayAdapter); 

提前非常感謝!

回答

1

您需要了解什麼asynchronous的意思。在空「試圖調用虛擬方法無效android.widget.ListView.setAdapter(android.widget.ListAdapter)':

你的代碼應該是這樣的:

final ListView lv = (ListView) findViewById(R.id.listView); 
    query.findInBackground(new FindCallback<ParseObject>() { 
     @Override 
     public void done(List<ParseObject> objects, ParseException e) { 
      if (e == null) { 
       ArrayList<String> teachers = new ArrayList<String>(); 
       for (ParseObject object : objects) { 
        String name = String.valueOf(object.get("name")); 
        Log.i("teacherName", name); 
        teachers.add(name); 
       } 
       final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, teachers); 
       lv.setAdapter(arrayAdapter); 
      } else { 
       Log.i("Get data from parse", "There was an error getting data!"); 
       e.printStackTrace(); 
      } 
     } 
    }); 
+0

我仍然得到以下錯誤對象引用「 –

+0

你的佈局文件中可能沒有帶有id ='listView'的'ListView'? – Divers

+0

嗯,就是這樣 - 將ListView放在錯誤的佈局文件中!謝謝! –

相關問題