Не удается разобрать JSON из URL, нет данных, бесконечная загрузка - PullRequest
0 голосов
/ 24 февраля 2019

Я изучаю, как получить данные JSON из URL.Я много читал и понял, что в WordPress реализован больше не используемый плагин «REST API V2», поэтому теперь у каждого сайта WordPress по умолчанию есть свой json-совместимый адрес.Вчера я нашел этот учебник и решил применить его к своему проекту, потому что я думаю, что это лучший способ для анализа и получения данных JSON из Интернета.

Так что я настроил егои у меня нет ошибок в кодировании, но он не извлекает данные из URL.Приложение сообщает мне, что у меня «нет данных», а затем начинает бесконечную загрузку.

В Logcat во время загрузки у меня есть это:

2019-02-24 13:41:15.589 571-701/? E/SDM: scalar::adjustSourceCrop: Source crop exceeds source image size: Crop(x,y,w,h)=(0,0,720,1440) Src(x,w)=(0,0)
2019-02-24 13:41:15.589 571-701/? E/SDM: ScalarConfig::ApplyScale: Scalar library failed to configure scale data!

Это URL JSON (вы можете использовать этот просмотрщик ).

Это мой проект -> GitHub

Это что я получаю при запуске приложения.

Связано ли это с неправильным URL-адресом JSON?Может быть, я не понимаю, как работает весь процесс.

1 Ответ

0 голосов
/ 24 февраля 2019

В вашем ParseContent классе вы предполагаете, что JSON полезная нагрузка - это JSONObject, но это JSONArrayJSON просмотра вы можете проверить это.JSON выглядит следующим образом:

[{...},{...},{...},...,{...}]

Итак, вам нужен другой подход для чтения данных.Ниже приведен пример того, как этот JSON должен быть проанализирован с использованием org.json библиотеки:

import org.json.JSONArray;

import java.io.File;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class JsonApp {

    public static void main(String[] args) throws Exception {
        File jsonFile = new File("./resource/test.json").getAbsoluteFile();
        String json = Files.readAllLines(jsonFile.toPath()).stream().collect(Collectors.joining());

        List<TemplateModel> infos = getInfo(json);
        infos.forEach(System.out::println);
    }

    private static List<TemplateModel> getInfo(String response) {
        JSONArray array = new JSONArray(response);
        List<TemplateModel> models = new ArrayList<>(array.length());
        for (Object item : array.toList()) {
            Map<String, Object> map = (Map) item;
            TemplateModel model = new TemplateModel();
            model.setCategories(((List) map.get("categories")).get(0).toString());
            model.setTitle(((Map) map.get("title")).get("rendered").toString());
            model.setAuthor(map.get("author").toString());
            model.setDate(map.get("date").toString());

            models.add(model);
        }

        return models;
    }
}

Над отпечатками кода:

TemplateModel{categories='365', title='Dai sofisti a Rousseau: quanto è democratico il televoto?', author='21', date='2019-02-24T12:02:22'}
TemplateModel{categories='235', title='Piedi screpolati e cattivo odore: tranquille, c&#8217;è la salvia', author='26', date='2019-02-24T11:14:49'}
TemplateModel{categories='495', title='Camarillo Brillo: 10 dischi più venduti della settimana 16-23 feb', author='27', date='2019-02-24T10:13:24'}
TemplateModel{categories='527', title='La Paranza dei Bambini, il pm: &#8220;La realtà è molto peggio&#8221;', author='1', date='2019-02-23T19:26:05'}
TemplateModel{categories='527', title='Festa: farò la rivoluzione ad Avellino. L&#8217;apertura a Petitto', author='11', date='2019-02-23T19:06:40'}
TemplateModel{categories='525', title='Cocaina Avellino, blitz nel parcheggio e in casa: in due nei guai', author='1', date='2019-02-23T17:42:03'}
TemplateModel{categories='525', title='Irpinia maltempo: vento abbatte alberi e pali|VIDEO e FOTO', author='23', date='2019-02-23T16:57:11'}
TemplateModel{categories='524', title='Valle del Sabato in rivolta contro fonderia: basta veleni!|VIDEO', author='38', date='2019-02-23T12:23:56'}
TemplateModel{categories='460', title='I segreti per scrivere un post di successo su Facebook', author='34', date='2019-02-23T12:19:52'}
TemplateModel{categories='525', title='Avellino, crolla albero a 2 passi dal teatro. Punto sul maltempo', author='23', date='2019-02-23T10:38:28'}

Ваш ParseContent.isSuccess иParseContent.getErrorCode методы не имеют смысла, потому что JSON полезная нагрузка не содержит эту информацию.Если вы получили JSON полезную нагрузку, это означает, что она уже OK.

РЕДАКТИРОВАТЬ после комментария
Если вы не можете использовать метод toList, попробуйте следующий подход, чтобы прочитать JSON:

private static List<TemplateModel> getInfo(String response) {
    JSONArray array = new JSONArray(response);
    List<TemplateModel> models = new ArrayList<>(array.length());
    for (int i = 0; i < array.length(); i++) {
        JSONObject jsonObject = (JSONObject) array.get(i);
        TemplateModel model = new TemplateModel();
        model.setCategories(((JSONArray) jsonObject.get("categories")).get(0).toString());
        model.setTitle(((JSONObject) jsonObject.get("title")).get("rendered").toString());
        model.setAuthor(jsonObject.get("author").toString());
        model.setDate(jsonObject.get("date").toString());

        models.add(model);
    }

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