11

Проблема с получением новостей от вКонтакте через VK SDK для Android. Так как стандартных классов в SDK нет, то формирую GET-запрос к API:

"https://api.vk.com/method/newsfeed.get?user_id="+id+"&filters=post&count=1&v=5.42&access_token="+ MyVK.getInstance().getAccessToken()

Где:
iduser_id;
MyVK.getInstance().getAccessToken() — полученный токен.

Вроде всё принимаю, обрезаю ответ, чтобы убрать {"response": и } в конце.
И тут хотелось бы поместить всё в JSONArray. Принимаю список новостей items, список профилей profiles, список групп groups и т.д.
Раньше всё вставлял в отдельную HashTable.

Как это всё сохранить, чтобы иметь доступ к каждой новости отдельно?

Данные, которые возвращает VK:

{"response":{"items":[{"type":"","source_id":,"date":,"post_id":,"post_type":""‌​,"text":"","attachments":[{"type":"","photo":{"id":,"album_id":,"owner_id":,"user‌​_id":,"photo_75":"",width":,"height":,"text":"","date":,"post_id":,"access_key":"‌​"}}],"post_source":{"type":"api"},"comments":{"count":0,"can_post":0},"likes":{"c‌​ount":67,"user_likes":0,"can_like":1,"can_publish":1},"reposts":{"count":7,"user_‌​reposted":0}}],"profiles":[],"groups":[{"id":,"name":"","screen_name":"","is_clos‌​ed":,"type":"","photo_50":""}
denshest
  • 121
  • Покажите json, который вам VK возвращает. – Suvitruf - Andrei Apanasik Jan 10 '16 at 21:28
  • {"response":{"items":[{"type":"","source_id":,"date":,"post_id":,"post_type":"","text":"","attachments":[{"type":"","photo":{"id":,"album_id":,"owner_id":,"user_id":,"photo_75":"",width":,"height":,"text":"","date":,"post_id":,"access_key":""}}],"post_source":{"type":"api"},"comments":{"count":0,"can_post":0},"likes":{"count":67,"user_likes":0,"can_like":1,"can_publish":1},"reposts":{"count":7,"user_reposted":0}}],"profiles":[],"groups":[{"id":,"name":"","screen_name":"","is_closed":,"type":"","photo_50":""} – denshest Jan 11 '16 at 05:06
  • Зачем обpeзать? Не проще вынуть JSONArray по ключу response? –  Mar 31 '17 at 08:15

3 Answers3

1

Я запилил отдельный класс VKPost с нужными мне данными и парсил JSONObject response на каждую переменную, которую хочу вытащить.

public ArrayList<VKPost> parse(@NonNull JSONObject r) throws JSONException {
    JSONObject response = r.getJSONObject("response");
    ArrayList<VKPost> posts = new ArrayList<>();
    JSONArray items = response.getJSONArray("items");
    String imgUrl = null;
    int from_id=0;
    for(int i=0;i<items.length();i++){
        JSONObject item = items.getJSONObject(i);
        int id = item.getInt("id");
        int date = item.getInt("date");
        int ownerId = item.getInt("owner_id");
        if (item.has("signer_id")) {
             from_id = item.getInt("signer_id");
        } else {from_id = ownerId;}
        JSONObject comments = item.getJSONObject("comments");
        int commentsCount = comments.getInt("count");
        if(item.has("attachments")) {
            imgUrl = item.getJSONArray("attachments")
                    .getJSONObject(0)
                    .getJSONObject("photo")
                    .getJSONArray("sizes")
                    .getJSONObject(4)
                    .getString("url");
        } else {
            imgUrl = "https://via.placeholder.com/150";
        }
        String post_text = item.getString("text");
    VKPost post = new VKPost(id,ownerId,from_id,imgUrl,post_text,commentsCount,date);
    posts.add(post);
}
return posts;

}

1

Попробуйте подобрать удобный инструмент. Например, для получения запросов и разбора ответов использовать Retrofit 2, а для хранения - StorIO или Realm.

tse
  • 3,716
  • 11
  • 25
  • Это стоило бы опубликовать комментарием, а не ответом. – insolor Sep 03 '20 at 06:00
1

VKSdk при вызове api возвращает вам response в котором есть переменная json в которой лежит JSONObject. Работайте с ним.

Eugene
  • 151