Сортировка данных JSON по имени в Android - PullRequest
0 голосов
/ 29 апреля 2018

Я пытаюсь упорядочить свои данные JSON по имени, я нашел здесь несколько ответов, но в моем случае ничего не работает. Я попытался обновить свой код, как вы видите ниже. Я отметил там, что я удалил из исходного кода, и что я добавил:

@Override
    protected Boolean doInBackground(String... args) {
        HttpHandler sh = new HttpHandler();
        String url = "androidnews.json";
        String jsonStr = sh.makeServiceCall(url);

        if (jsonStr != null) {
            try {
                //removed this:
                //JSONObject jsonObj = new JSONObject(jsonStr);
                //JSONArray actors = jsonObj.getJSONArray("result");

                //ADDED:
                ArrayList<JSONObject> array = new ArrayList<JSONObject>();
                JSONArray actors = new JSONArray("result");

                for (int i = 0; i < actors.length(); i++) {
                    JSONObject c = actors.getJSONObject(i);

                    //ADDED:
                    array.add(actors.getJSONObject(i));

                    Actors actor = new Actors();

                    actor.setName(c.getString("name"));
                    actor.setThumb(c.getString("thumb"));

                    actorsList.add(actor);
               }

               //ADDED:
               Collections.sort(array, new Comparator<JSONObject>() {

                        @Override
                        public int compare(JSONObject lhs, JSONObject rhs) {
                            // TODO Auto-generated method stub

                            try {
                                return (lhs.getString("name").toLowerCase().compareTo(rhs.getString("name").toLowerCase()));
                            } catch (JSONException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                                return 0;
                            }
                        }
                    });



           }  catch (final JSONException e) {

                Zoznam.this.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(Zoznam.this.getApplicationContext(),
                                "Data error " + e.getMessage(),
                                Toast.LENGTH_LONG).show();
                    }
                }); }

            return true;

        } else {

            Zoznam.this.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(Zoznam.this.getApplicationContext(),
                            "Chyba internetového pripojenia.",
                            Toast.LENGTH_LONG).show();
                }
            });
            return false;
        }
    }

Но после того, как я его протестировал, у меня появляется эта ошибка: Результат значения типа java.lang.String не может быть преобразован в JSONArray

Мой JSON начинается с: {"result": [{"name": "Joe","thumb": "image.jpg",...

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Вместо сортировки вашего JSONArray попробуйте отсортировать Arraylist с пользовательским объектом и использовать его. Вы можете сделать что-то вроде этого

Collections.sort(actorsList, new Comparator<Actors>() {
    @Override
    public int compare(Actors lhs, Actors rhs) {
        return lhs.getName().compareTo(rhs.getName());
    }
});
0 голосов
/ 29 апреля 2018

Решение вашей текущей проблемы:

Я предполагаю, что вы используете библиотеку org.json. В настоящее время вы пытаетесь создать JSONArray из строки "result".

Вот как вы получаете доступ к массиву в файле JSON:

JSONObject obj = new JSONObject(Files.readAllLines(Paths.get("/path/to/your/file.json")));
JSONArray arr = obj.getJSONArray("number");

Источник: более полезных примеров, подобных приведенному выше


Дополнительная информация:

Поскольку вам кажется, что вы не знакомы с подходом org.json, я настоятельно рекомендую взглянуть на gson, поскольку он обеспечивает простой способ сопоставления записей JSON с объектами (или даже массивами объектов).

См .: это и это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...