2015-12-05 73 views
1

你好,我正在学习android和试图显示自定义的ListView,但它无法加载。这个问题来自我的查询,因为列表是空的。请按照下面的解析示例,我做错了什么?无法检索使用解析查询

下面是我的代码使用片段来显示视图,因为它未能充气。

EventTab.java:

 //query Events for current user 
     private void queryEventListFromParse(){ 

      //Create query for objects of type "Event" 
      ParseQuery<ParseObject> query = ParseQuery.getQuery("Event"); 
      // Restrict to cases where the author is the current user. 
      //pass in a ParseUser and not String of that user 

      query.whereEqualTo("author", ParseUser.getCurrentUser()); 
      query.orderByAscending("createAt"); 

      // Run the query 
      query.findInBackground(new FindCallback<ParseObject>() { 
       @Override 
       public void done(List<ParseObject> eventList, ParseException e) { 
        if (e == null) { 
         // If there are results, update the list of event and notify the adapter 
         Log.d(TAG, "Im in background"); //im able to display image 
         eventList.clear(); 
         for (ParseObject event : eventList) { 
          eventList.add(event); 
         } 

         updateEventsList(); 

        } else { 
         Log.d(TAG, "Event retrieval error: " + e.getMessage()); 
        } 
       } 
      }); 
     } 

重要更新: 感谢阴影的Droid您指出的错误。之所以getView()失败,是因为名为evenList的List返回0,无法调用getView,因此返回0,并且无法显示列表。

下面是错误消息,当我评论eventList.clear();

错误从控制台:

12-05 04:52:10.511 11450-11450/com.example.davchen.skibuddies E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.example.davchen.skibuddies, PID: 11450 
    java.util.ConcurrentModificationException 
      at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:573) 
      at com.example.davchen.skibuddies.Fragments.EventTab$1.done(EventTab.java:87) 
      at com.example.davchen.skibuddies.Fragments.EventTab$1.done(EventTab.java:80) 
      at com.parse.ParseTaskUtils$2$1.run(ParseTaskUtils.java:115) 
      at android.os.Handler.handleCallback(Handler.java:739) 
      at android.os.Handler.dispatchMessage(Handler.java:95) 
      at android.os.Looper.loop(Looper.java:145) 
      at android.app.ActivityThread.main(ActivityThread.java:5942) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 
+0

如果得到任何错误或崩溃检查,然后分享它 –

+0

后listview_event_item.xml和堆栈跟踪 – johnrao07

+0

@ρяσѕρєяK它无法显示自定义列表。 – user3497437

回答

1

这是发生bcoz你逝去的空EVENTLIST到您的适配器。参数和全局变量存在混淆。
全局变量private List<Event> eventList;它被初始化为在onCreate中为空。

而在done方法参数你清除你解析eventList.clear();

query.findInBackground(new FindCallback<ParseObject>() { 
       @Override 
       public void done(List<ParseObject> eventList, ParseException e) { 
        if (e == null) { 
         // If there are results, update the list of event and notify the adapter 
         Log.d(TAG, "Im in background"); //im able to display image 
         eventList.clear(); 
         for (ParseObject event : eventList) { 
          eventList.add(event); 
         } 

         updateEventsList(); 

        } else { 

因此您的适配器获得计数为零,它不会调用getView方法后得到的名单
作为一个解决方案,我建议通过注释eventList.clear();如果正常工作,你仍然需要清除列表,然后去不同的变量或参数名称

+0

是的,谢谢,我注意到了。我评论它,但返回一个错误? – user3497437

+0

然后请更新与该错误的问题 –

+0

@ShadwoDroid更新,并感谢 – user3497437