2017-02-25 155 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放在错误的布局文件中!谢谢! –

相关问题