Как правильно парсить Reddit API в Android

Итак, я пытался разобрать Reddits r/hot/.json API, чтобы получить представление списка информации о теме, но я не могу правильно понять свой JSON. Я искал везде, и я не могу найти хороший пример того, как это сделать для Reddit. Вот что у меня пока есть..

JSONObject response = new JSONObject(result);
        JSONObject data = response.getJSONObject("data");
        JSONArray hotTopics = data.getJSONArray("children");

        for(int i=0; i<hotTopics.length(); i++) {
            JSONObject topic = hotTopics.getJSONObject(i);

            String author = topic.getString("author");
            String imageUrl = topic.getString("thumbnail");
            String postTime = topic.getString("created_utc");
            String rScore = topic.getString("score");
            String title = topic.getString("title");

            topicdata.add(new ListData(title, author, imageUrl, postTime, rScore));
            Log.v(DEBUG_TAG,topicdata.toString());
        }

------- Редактировать Хорошо, чтобы дать более подробную информацию. Я сделал запрос HttpGet на "http://www.reddit.com/r/hot/.json?sort=new&count=25" Когда я запускаю свой код в его нынешнем виде, я получаю следующее исключение JSONException

07-06 22:23:11.628 2580-2580/com.google.android.gms.redditviewr.app W/System.err﹕ org.json.JSONException: No value for author 07-06 22:23:11.632 2580-2580/com.google.android.gms.redditviewr.app W/System.err﹕ at org.json.JSONObject.get(JSONObject.java:354) 07-06 22:23:11.632 2580-2580/com.google.android.gms.redditviewr.app W/System.err﹕ at org.json.JSONObject.getString(JSONObject.java:514) 07-06 22:23:11.636 2580-2580/com.google.android.gms.redditviewr.app W/System.err﹕ at Tasks.RedditApiTask.onPostExecute(RedditApiTask.java:78) 07-06 22:23:11.636 2580-2580/com.google.android.gms.redditviewr.app W/System.err﹕ at Tasks.RedditApiTask.onPostExecute(RedditApiTask.java:22) 07

Что указывает на первый элемент в моей логике синтаксического анализа JSON. Но это не имеет смысла, потому что все эти элементы действительно есть в дочернем массиве.


person feilong    schedule 07.07.2014    source источник
comment
Какой у Вас вопрос? Что еще более важно, что происходит, когда вы запускаете свой код? Вы получаете ошибку?   -  person Code-Apprentice    schedule 07.07.2014
comment
Хорошо, показ JSON, который вы пытаетесь разобрать, наверняка поможет!   -  person meda    schedule 07.07.2014
comment
Хорошо, я добавил некоторые подробности в пост. Я получаю JSONException   -  person feilong    schedule 07.07.2014
comment
проверьте свою выходную строку JSON и посмотрите, есть ли у нее этот автор тега   -  person Nguyễn Hoài Nam    schedule 07.07.2014


Ответы (2)


Вы должны пойти еще на один уровень глубже, так как структура

result
-- data
---- children
------ data
-------- author
-------- thumbnail
-------- created_utc
-------- score
-------- title

Попробуйте что-нибудь вроде этого

for (int i = 0; i < hotTopics.length(); i++) {
    JSONObject topic = hotTopics.getJSONObject(i).getJSONObject("data");

    String author = topic.getString("author");
    String imageUrl = topic.getString("thumbnail");
    String postTime = topic.getString("created_utc");
    String rScore = topic.getString("score");
    String title = topic.getString("title");

    topicdata.add(new ListData(title, author, imageUrl, postTime, rScore));
    Log.v(DEBUG_TAG, topicdata.toString());
}
person Okky    schedule 07.07.2014
comment
Да, это сделало для меня. Ого, спасибо, Шрикеш Окки. Ты восхитителен - person feilong; 07.07.2014
comment
Где, черт возьми, найти структуру? Я не уверен, что это только я новичок, но документацию API Reddit было немного сложно понять и понять. - person Patrick E.; 27.09.2014
comment
Спасибо вам большое за это! Моей первой реакцией было найти библиотеку, чтобы просто получить URL-адреса тем. Я получил jReddit и потратил часы, пытаясь заставить его (и его безумное количество зависимостей) работать, но безуспешно. К счастью, я нашел это! - person vedi0boy; 06.01.2016

Вы можете облегчить себе жизнь, если воспользуетесь ретрофитом + jsonschema2pojo

Или вы можете добавить rest2mobile подключаемый модуль/библиотеку в свою Android Studio, которая сразу реализует те же функции. См. Reddit на основе примера rest2mobile здесь.

person ViksaaSkool    schedule 14.07.2015