从解析服务器检索数组并在列表视图中显示数据

时间:2019-03-29 16:30:24

标签: android parse-platform parse-android-sdk

我是Android新手,我需要帮助来检索在解析服务器中创建的名为“ busStops”的数组,但我无法弄清楚代码中的问题所在

 ParseQuery<ParseObject> parseQuery = new ParseQuery<ParseObject> 
("RouteDetails");

 parseQuery.whereEqualTo("routeNumber",searchView.getText().toString());

    parseQuery.findInBackground(new FindCallback<ParseObject>() {
        @Override
        public void done(List<ParseObject> busStops, ParseException e) {
            if(e == null){
                final List<String> arrayList = new ArrayList<>();
                    for (ParseObject parseObject : busStops){
                        if (parseObject.getList("busStops") != null) {
                                arrayList.add(parseObject.getList("busStops").toString());
                        }
                    }
                arrayAdapter = new ArrayAdapter(SearchForRoutes.this,android.R.layout.simple_list_item_1,arrayList);
                listView.setAdapter(arrayAdapter);
            }

        }
    });

2 个答案:

答案 0 :(得分:1)

可以在ListView中显示一个数组。您应该在Java代码中使用getJSONArray而不是getList。请参阅下面的代码。

我的结构类是:

enter image description here

然后,我将以下代码添加到我的Activity(MainActivity.java)中:

final ListView listView = (ListView) findViewById(R.id.listviewA);

    ParseQuery<ParseObject> query = ParseQuery.getQuery("RouteDetails");
    query.findInBackground(new FindCallback<ParseObject>() {
        public void done(List<ParseObject> results, ParseException e) {
            if (e == null) {
                for(int i = 0; i < results.size(); i++) {
                    JSONArray array = results.get(i).getJSONArray("busStop");

                    for(int j = 0; j < array.length(); j++) {
                        try {
                            dataList.add(array.getString(j));
                        } catch (JSONException e1) {
                            e1.printStackTrace();
                        }
                    }

                    myArray = dataList.toArray(new String[dataList.size()]);

                    ArrayAdapter<String> adapterList
                            = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_single_choice, myArray);

                    listView.setAdapter(adapterList);

                }
            } else {
                final Toast toast = Toast.makeText(
                        MainActivity.this,
                        String.valueOf("Error =>" + e.getMessage()),
                        Toast.LENGTH_LONG
                );
                toast.show();
            }
        }
    });

结果将是这样的:

enter image description here

答案 1 :(得分:0)

首先,除了 parseObject.getList(“ busStops”)返回的列表之外,您可能不需要创建另一个 ArrayList 。您可以将其直接传递给适配器构造函数。但是由于您可能要对列表进行处理,因此请像这样对列表进行迭代: for(Object s : parseObject.getList("busStops") { String current = s.toString(); }

还可以通过将列表传递给ArrayList构造函数将列表保存到另一个ArrayList中。 ArrayList<String> al = new ArrayList<>(parseObject.getList("busStops"))

最后,您可以通过从无空if语句行中删除 .toString()并将更改为addAll添加到addAll来修复代码(这是最坏的做法:)) 。 像这样:arrayList.addAll(parseObject.getList("busStops"));