无法使用解析

时间:2015-12-05 11:37:16

标签: java android listview parse-platform

您好我正在学习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());
                    }
                }
            });
        }

重要更新: 感谢Shadow Droid指出错误。之所以无法调用getView()是因为List调用了evenList,返回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)

1 个答案:

答案 0 :(得分:1)

bcoz正在将空 eventList 传递给您的适配器。参数和全局变量存在混淆 全局变量 private List<Event> eventList;并在onCreate中初始化为空。

在完成方法中作为参数,您正在清除解析后的列表 <{1}}

eventList.clear();

因此你的适配器计数为零,它不会调用getView方法。
作为一种解决方案,我建议通过评论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 { 进行检查,如果工作正常,仍然需要清除列表,那么请选择不同的变量或参数名称