0

我是 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);
            }

        }
    });
4

2 回答 2

0

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

我的结构类是:

在此处输入图像描述

然后,我将以下代码添加到我的 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();
            }
        }
    });

结果将是这样的:

在此处输入图像描述

于 2019-04-04T15:59:24.230 回答
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()并将 add 更改为 addAll 来修复您的代码(这是最坏的做法:))。像这样 :arrayList.addAll(parseObject.getList("busStops"));

于 2020-09-18T04:05:06.987 回答