将Parse.com中的数组显示为ListView

时间:2015-07-07 21:33:39

标签: java android parse-platform

我的Parse数据库中有一个类如下:

enter image description here

我不想在我的活动中的ListView中显示它,以便它显示当前设备的每个Date和Reps值。对于设备yhmrKgokfS,它看起来像这样:

  

-Jul 05,15
  2/3

     

-Jul 05,15
  5/3/2/4/2

     

-Jul 05,15
  4/5/5/6/3

以下是我用来实现此目的的代码:

    private ListView displayList;
    List<ParseObject> store = new ArrayList<ParseObject>();


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        displayList = (ListView)findViewById(R.id.displayList);


        ParseQuery<ParseObject> query = ParseQuery.getQuery("Workout");
        query.whereEqualTo("Device", ParseInstallation.getCurrentInstallation());
        query.setLimit(100);
        query.findInBackground(new FindCallback<ParseObject>() {
            @Override
            public void done(List<ParseObject> dataList, ParseException e) {

                // logic here
                store = dataList;

            }
        });

        final ArrayAdapter<ParseObject> arrayAdapter = new ArrayAdapter<ParseObject>(
                this,
                android.R.layout.simple_expandable_list_item_1,
                store
        );

        displayList.setAdapter(arrayAdapter);

    }

然而,我的清单最终是空的。将我的Parse数据库中的项目显示到ListView中的正确方法是什么?我得到了它的要点,但无法正确执行它,有人可以编写一些代码来帮助我获得我需要做的事情吗?

2 个答案:

答案 0 :(得分:0)

您正在将store传递到您的适配器,但随后您在done的{​​{1}}中更改了它的引用,该引用是异步运行的,因此您的适配器只保留在空列表中。您应该修改findInBackground的同一个实例。快速解决方法是在store

中添加
done

然后拨打store.addAll(dataList)

此外,默认适配器仅使用每个对象的adapter.notifyDataSetChanged();,因此如果要查看任何有用的内容,则需要创建自定义适配器。

答案 1 :(得分:0)

我不认为默认ArrayAdapter知道如何解释ArrayList<ParseObject>对象,您需要创建自己的适配器或使用带有List<String>对象的默认适配器。 / p>

同样在done(....)方法中,您应该将新项目添加到列表中,而不是再次初始化store对象。

 @Override
 public void done(List<ParseObject> dataList, ParseException e) {              
      store.addAll(dateList);
      context.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                arrayAdapter.notifyDataSetChanged();
            }
       });

 }