在Android中正确读取JSON文件时出错

时间:2018-03-06 19:15:45

标签: java android json android-studio parsing

我在以下JSON格式的API中读取奇怪的问题 - Trivia API(此URL通过Async传入)。我将在下面更详细地解释,但基本上我的代码似乎没有正确读取JSON文件,这导致我无法循环并相应地设置我的问题对象。

日志显示在IOUtils上读取输入流似乎没有完成读取整个JSON文件,通常是在文件中的第11个问题对象停止。

我认为这与Log限制有关,因为当我向Log添加更多内容时(例如"这是json String - ")它打印较少,但这并不能解释为什么它没有正确地循环遍历问题对象并相应地设置它们。其他日志显示它甚至没有循环问题,它只经过一次而只设置标题。

我对发生的事情一无所知,因为我解析了其他JSON文件的字面意思与此完全相同。

@Override
protected ArrayList<Question> doInBackground(String... strings) {
    HttpURLConnection connection = null;
    ArrayList<Question> result = new ArrayList<>();
    try {
        URL url = new URL(strings[0]);
        connection = (HttpURLConnection) url.openConnection();
        connection.connect();
        if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {

            String json = IOUtils.toString(connection.getInputStream(), "UTF-8");
            Log.d("demo", "This is the json String - " + json);

            JSONObject root = new JSONObject(json);
            JSONArray questions = root.getJSONArray("questions");
            for (int i = 0; i < questions.length(); i++) {
                JSONObject questionsJSONObject = questions.getJSONObject(i);
                Question question = new Question();

                question.setText(questionsJSONObject.getString("text"));

                //Choice array
                JSONObject choicesObject = questionsJSONObject.getJSONObject("choices");
                String[] temp = new String[choicesObject.getJSONArray("choice").length()];
                for (int j = 0; j < choicesObject.getJSONArray("choice").length(); j++) {
                    temp[j] =  choicesObject.getJSONArray("choice").getJSONObject(j).toString();
                }
                question.setChoices(temp);
                //End of Choice array

                question.setAnswer(questionsJSONObject.getInt("answer");

                question.setUrlToImage(questionsJSONObject.getString("image"));

                result.add(question);
            }
        }
    } catch (Exception e) {
        //Handle Exceptions
    } finally {
        //Close the connections
    }
    Log.d("demo", "toString - " + result.toString());
    return result;
}

0 个答案:

没有答案