您好我正在学习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)
答案 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 {
进行检查,如果工作正常,仍然需要清除列表,那么请选择不同的变量或参数名称