Android ListView适配器无法使用Parse SDK

时间:2016-06-02 14:54:28

标签: java android listview arraylist parse-platform

我是Android的绝对初学者,我可以成功从我的Parse数据库中检索数据但是我无法将它们显示到自定义ListView中,有线的是应用程序停止但是Android监视器或消息控制台都没有Android Studio给我带来任何错误,消息控制台实际上说信息:构建成功,Logcat完全是空的,但应用程序因警告而停止不幸的是,YourApp已经停止 < / p>

这是我在MainActivity.java中的代码:

 // MARK: - QUERY EVENTS
public  void queryEvents() {

    final ArrayAdapter<String> listAdapter = new ArrayAdapter<String>(this,
            R.layout.test_cell);
    final ListView eventsListView = (ListView) findViewById(R.id.eventsListView);
    eventsListView.setAdapter(listAdapter);

    // Query
    ParseQuery<ParseObject> query = ParseQuery.getQuery("EventsClass");
    query.findInBackground(new FindCallback<ParseObject>() {
        public void done(List<ParseObject> objects, ParseException error) {
            if (error == null) {
                eventsArray = objects;
                progDialog.dismiss();

                for (int i = 0; i < eventsArray.size(); i++) {
                    ParseObject eventClass = eventsArray.get(i);
                    String title = eventClass.getString("title");
                    Toast.makeText(getApplicationContext(), eventClass.getString("title"), Toast.LENGTH_LONG).show();
                    listAdapter.add(title);
                }

            } else {
                Toast.makeText(getApplicationContext(), error.getMessage().toString(), Toast.LENGTH_LONG).show();
            }

        }
    });

注意:如果我评论listAdapter.add(title);,Toast消息没问题,它会一个接一个地从我的Parse数据库中触发所有“标题”记录,并且应用程序不会崩溃。否则,我没有得到任何数据,应用程序会停止,如上所述。

我的R.layout。 test_cell 是一个简单的xml文件,它是正确的,它托管一个带有TextView的LinearLayout。

我在这里做错了什么?我没有创建任何自定义ListAdapter.java文件,不知道我是否真的需要它与上面的代码...

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为你的问题基于你如何启动listAdapter,我建议你做两件事:

1)创建ArrayList<String>以保存从解析

获得的所有记录

2)要初始化listAdapter,请确保使用构造函数作为参数ContextlayoutidArrayList。您已经拥有的前两个参数,只需在TextView中添加第三个R.layout.test_cell的id,为第四个参数添加您创建的ArrayList。请务必使用new ArrayList<>()

在此之前对其进行初始化

3)当您从解析中收到值时更新ArrayList而不是直接更新Adapter。像这样:

    for (int i = 0; i < eventsArray.size(); i++) {
                ParseObject eventClass = eventsArray.get(i);
                String title = eventClass.getString("title");
                arrayList.add(title);
    }
    // Once you update your ArrayList you can update the Adapter
    listAdapter.notifyDataSetChanged();

这应该可以解决问题。