java - Android ListView 适配器无法与 Parse SDK 一起使用

标签 java android listview arraylist parse-platform

我是 Android 的绝对初学者,我可以成功地从 Parse 数据库中检索数据,但无法将它们显示到自定义 ListView 中,有线问题是应用程序停止,但 Android 监视器或消息控制台都没有停止Android Studio 给我任何错误,消息控制台实际上显示信息:BUILD SUCCESSFUL,Logcat 完全为空,但应用程序停止并显示类似不幸的是,YourApp 已停止

这是我在 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 数据库中的所有“title”记录,并且应用程序不会崩溃。否则,我不会收到任何数据,并且应用程序将停止,如上所述。

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

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

谢谢!

最佳答案

我认为你的问题基于你的初始化方式 listAdapter ,我建议您做两件事:

1) 创建 ArrayList<String>保存从解析中获得的所有记录

2) 初始化listAdapter确保使用以 Context 作为参数的构造函数, layout , idArrayList 。您已经拥有前两个参数,只需添加第三个参数,即 TextView 的 id在R.layout.test_cell对于第四个参数添加 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();

这应该可以解决问题。

关于java - Android ListView 适配器无法与 Parse SDK 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37595310/

相关文章:

java - JAXB2 类型限制不起作用?

java - Spring Oauth2 重定向 uri 没有改变

java - 构造函数 Adapter_PagerAdapter(FragmentManager, List<Fragment>) 未定义

android - 立即从适配器更新 ListView

java - Android:下载的图像未显示在 ListView 中

可编辑所有记录的 ASP.NET Gridview

java - Android SSL JNI结构?

java - jar 文件与黑莓不兼容

android - 将固定/静态 header 添加到抽屉导航布局

macos - 为什么 SwiftUI 列表行被选中但未突出显示 (MacOS)