【问题标题】:Android ListView adapter not working with Parse SDKAndroid ListView 适配器不适用于 Parse SDK
【发布时间】:2016-06-02 14:54:28
【问题描述】:

我是 Android 的绝对初学者,我可以成功地从我的 Parse 数据库中检索数据,但我无法将它们显示到自定义 ListView 中,有线的事情是应用程序停止但 Android 监视器或消息控制台都没有Android Studio 给我任何错误,消息控制台实际上说 Information: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 数据库中触发所有“标题”记录,一个接一个,并且应用程序不会崩溃。否则,我将得不到任何数据,并且应用程序会如上所述停止。

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

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

谢谢!

【问题讨论】:

  • 如果您收到“不幸的是,YourApp 已停止” - 您的 logcat 中确实应该有来自您正在测试的设备或模拟器的内容。
  • 这就是为什么我说它是有线的,我真的在 Logcat 中什么都没有:(

标签: java android listview arraylist parse-platform


【解决方案1】:

我认为你的问题在于你如何初始化listAdapter,我建议你做两件事:

1) 创建一个ArrayList&lt;String&gt; 来保存您从 parse 获得的所有记录

2) 要初始化listAdapter,请确保使用以ContextlayoutidArrayList 作为参数的构造函数。您已经拥有的前两个参数,只需添加第三个参数,即 R.layout.test_cell 中的 TextView 的 id,第四个参数添加您创建的 ArrayList。确保在此之前使用new ArrayList&lt;&gt;()对其进行初始化

3) 当您从 parse 收到您的值时,请更新 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();

这应该可以解决问题。

【讨论】:

  • 如果我的 test_cell 也有多个 textView 和一个 ImageView 怎么办?
  • 那么您将不得不使用自定义适配器而不是默认的ArrayAdapter
  • 好的,有任何示例代码吗?我真的不知道如何制作它
  • 如果有时间请检查这个问题:stackoverflow.com/q/37585088/3724800
  • Android Studio 2.1 为自定义适配器准备了一个模板,simplay 添加一个 Fragment with ListView 到您的应用程序。比这里关于 SO 的大多数解释更容易
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多