Извлечение массива с сервера синтаксического анализа и отображение данных в виде списка

#android #parse-platform #parse-android-sdk

#Android #синтаксический анализ-платформа #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);
            }

        }
    });
  

Комментарии:

1. ‘routeNumber’ — это тип числа или тип строки в parse-server? Если число, то попробуйте преобразовать SearchView.getText() в число перед передачей запроса parse.

2. Я пробовал SearchView.getText (), он все еще не работает

3. Каков тип данных ‘routeNumber’ в parse-server?

4. Номер маршрута имеет тип int на сервере синтаксического анализа

5. Попробуйте использовать Integer.parseInt(SearchView.getText())

Ответ №1:

Можно отобразить массив в ListView. Вам следует использовать getJSONArray вместо getList в вашем JAVA-коде. Смотрите мой код ниже.

Мой класс структуры:

введите описание изображения здесь

Затем я добавил приведенный ниже код в свою деятельность (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();
            }
        }
    });
  

И результат будет примерно таким:

введите описание изображения здесь

Ответ №2:

Прежде всего, вам может не понадобиться создавать другой ArrayList, кроме списка, возвращаемого ParseObject.getList(«busStops»). Вы можете напрямую передать его конструктору адаптера. Но поскольку вы можете захотеть выполнить процесс в списке, выполните итерацию списка следующим образом : for(Object s : parseObject.getList("busStops") { String current = s.toString(); }

Также вы можете сохранить список в другой ArrayList, передав его конструктору ArrayList. ArrayList<String> al = new ArrayList<>(parseObject.getList("busStops"))

И, наконец, вы можете исправить свой код (что является наихудшей практикой :)), просто удалив .toString() из строки в вашем операторе none-null if и изменение add на addAll. вот так : arrayList.addAll(parseObject.getList("busStops"));