ListArray массив объектов

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Ответить
Mr. Nobody
Сообщения: 40
Зарегистрирован: 22 апр 2013, 21:28

ListArray массив объектов

Сообщение Mr. Nobody » 28 сен 2013, 17:03

Здравствуйте.
Я подключил библиотеку Kate API (https://github.com/thest1/Android-VKontakte-SDK)
Там в примере разобран метод, который просто отправляет запрос, с ним все понятно, но есть методы, которые присылают ответ, например, http://vk.com/dev/wall.get

Вот этот код из библиотеки

Код: Выделить всё

/*** methods for wall
     * @throws KException ***/
    //http://vk.com/dev/wall.get
    public ArrayList<WallMessage> getWallMessages(Long owner_id, int count, int offset, String filter) throws MalformedURLException, IOException, JSONException, KException{
        Params params = new Params("wall.get");
        params.put("owner_id", owner_id);
        if (count > 0)
            params.put("count", count);
        params.put("offset", offset);
        params.put("filter", filter); //owner, others, all - default
        JSONObject root = sendRequest(params);
        JSONArray array = root.getJSONArray("response");
        ArrayList<WallMessage> wmessages = new ArrayList<WallMessage>();
        int category_count = array.length();
        for(int i = 1; i < category_count; ++i) {
            JSONObject o = (JSONObject)array.get(i);
            WallMessage wm = WallMessage.parse(o);
            wmessages.add(wm);
        }
        return wmessages;
    }
т.е. возвращается ArrayList, но у меня не получается высунуть из него нормально текст, потому что он(ArrayList) в каком-то формате <WallMessage>

Код: Выделить всё

public class WallMessage implements Serializable {
    private static final long serialVersionUID = 1L;
    public long from_id;
    public long to_id;
    public long date; 
    public String text;
    public long id;
    public String online;
    public ArrayList<Attachment> attachments;
    public long comment_count;
    public boolean comment_can_post;

    //likes
    public int like_count;
    public boolean user_like;
    public boolean can_like;
    public boolean like_can_publish;
    
    //reposts
    public int reposts_count;
    public boolean user_reposted;
    
    public long copy_owner_id=0;
    public long copy_post_id=0;
    public String copy_text;
    public long signer_id=0;
    
    public static WallMessage parse(JSONObject o) throws JSONException {
        WallMessage wm = new WallMessage();
        wm.id = o.getLong("id");
        wm.from_id = o.getLong("from_id");
        wm.to_id = o.getLong("to_id");
        wm.date = o.optLong("date");
        wm.online = o.optString("online");
        wm.text = Api.unescape(o.optString("text"));
        if (o.has("likes")){
            JSONObject jlikes = o.getJSONObject(NewsJTags.LIKES);
            wm.like_count = jlikes.optInt("count");
            wm.user_like = jlikes.optInt("user_likes")==1;
            wm.can_like = jlikes.optInt("can_like")==1;
            wm.like_can_publish = jlikes.optInt("can_publish")==1;
        }
        wm.copy_owner_id = o.optLong("copy_owner_id");
        wm.copy_text = Api.unescape(o.optString("copy_text"));
        JSONArray attachments=o.optJSONArray("attachments");
        JSONObject geo_json=o.optJSONObject("geo");
        //владельцем опроса является to_id. Даже если добавить опрос в группу от своего имени, то from_id буду я, но опрос всё-равно будет принадлежать группе.
        wm.attachments=Attachment.parseAttachments(attachments, wm.to_id, wm.copy_owner_id, geo_json);
        if (o.has("comments")){
            JSONObject jcomments = o.getJSONObject("comments");
            wm.comment_count = jcomments.optInt("count");
            wm.comment_can_post = jcomments.optInt("can_post")==1;
        }
        wm.signer_id = o.optLong("signer_id");
        if (o.has(NewsJTags.REPOSTS)){
            JSONObject jlikes = o.getJSONObject(NewsJTags.REPOSTS);
            wm.reposts_count = jlikes.optInt("count");
            wm.user_reposted = jlikes.optInt("user_reposted")==1;
        }
        return wm;
    }
    
    public static WallMessage parseForNotifications(JSONObject o) throws JSONException {
        WallMessage wm = new WallMessage();
        wm.id = o.getLong("id");
        wm.from_id = o.getLong("owner_id");
        wm.to_id = o.optLong("to_id");
        wm.text = Api.unescape(o.getString("text"));
        //likes is there but I don't parse it because I don't need it
        //if (o.has("likes")){
        //    JSONObject jlikes = o.getJSONObject(NewsJTags.LIKES);
        //    wm.like_count = jlikes.getInt("count");
        //    wm.user_like = jlikes.getInt("user_likes")==1;
        //    wm.can_like = jlikes.getInt("can_like")==1;
        //    wm.like_can_publish = jlikes.getInt("can_publish")==1;
        //}
        JSONArray attachments=o.optJSONArray("attachments");
        JSONObject geo_json=o.optJSONObject("geo");
        wm.attachments=Attachment.parseAttachments(attachments, wm.to_id, wm.copy_owner_id, geo_json);
        return wm;
    }
}
Я делаю так

Код: Выделить всё

ArrayList Wall; 
TextView log; 
...
Wall = api.getWallMessages(1l, 1, 1, "all"); 
log.setText((CharSequence) Wall.get(0));
Но log не изменяется

Вот ответ в JSON

Код: Выделить всё

09-28 04:41:45.121: INFO/Kate.Api(811): response={"response":[118,{"id":45572,"from_id":1,"to_id":1,"date":1379948451,"post_type":"post","text":"Надежда Толоконникова — 23-летняя студентка философского факультета МГУ, которая отбывает два года колонии по статье \"Хулиганство\" из-за участия в рок-группе Pussy Riot.<br><br>Сегодня Надя объявила о голодовке и написала открытое письмо о жизни в ее колонии — 17-часовой рабочий день, 4-часовой сон, ежедневные избиения, запугивание, лишение базовой гигиены и пищи.<br><br>Любой из нас или наших близких может оказаться на месте этой девушки. Поддержим Надю, рассказав о ее письме друзьям. То, что она описывает, должно быть искоренено.","media":{"type":"share","share_url":"http:\/\/lenta.ru\/articles\/2013\/09\/23\/tolokonnikova\/","share_title":"«Вы теперь всегда будете наказаны»"},.... и т.д. в общем


Спрашивал у автора библиотеки, мне сказали:"
Массив объектов так просто не отобразить. Нужно для начала написать цикл."

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: ListArray массив объектов

Сообщение rezak90 » 28 сен 2013, 17:11

Нужно сначала взять книжку по Java и прочитать, хотя бы один раз. Не знать как работать с ArrayList, стыдно.
R.id.team
Политика на форуме запрещена

Mr. Nobody
Сообщения: 40
Зарегистрирован: 22 апр 2013, 21:28

Re: ListArray массив объектов

Сообщение Mr. Nobody » 28 сен 2013, 17:52

Я прочитал тут http://developer.alexanderklimov.ru/and ... aylist.php
и сделал так

Код: Выделить всё

Wall = api.getWallMessages(1l, 1, 1, "all");  
log.setText((CharSequence) Wall.get(0));
но это не работает

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: ListArray массив объектов

Сообщение rezak90 » 28 сен 2013, 18:05

потому что скопировать код не значит что он будет работать
R.id.team
Политика на форуме запрещена

Аватара пользователя
Finch
Сообщения: 439
Зарегистрирован: 16 июл 2012, 21:37

Re: ListArray массив объектов

Сообщение Finch » 28 сен 2013, 18:35

=)
CEO of a company R.id.team

Mr. Nobody
Сообщения: 40
Зарегистрирован: 22 апр 2013, 21:28

Re: ListArray массив объектов

Сообщение Mr. Nobody » 28 сен 2013, 18:57

Ну я же не просто копирую, мне кажется тут должно все работать

Код: Выделить всё

Wall = api.getWallMessages(1l, 1, 1, "all"); //получаем этот массив  
log.setText((CharSequence) Wall.get(0)); // берем первый элемент
Было бы славно, если бы вы написали как правильно

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: ListArray массив объектов

Сообщение rezak90 » 28 сен 2013, 19:11

Если вопрос стоит в не знании Java то я принципиально на него не отвечаю, так как считаю что познания андроида начинается именно с Java.
R.id.team
Политика на форуме запрещена

Mr. Nobody
Сообщения: 40
Зарегистрирован: 22 апр 2013, 21:28

Re: ListArray массив объектов

Сообщение Mr. Nobody » 29 сен 2013, 12:28

Код: Выделить всё

ArrayList<WallMessage> wall;
...
wall = api.getWallMessages(1l, 1, 1, "all");
log.setText(wall.get(0).text);

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: ListArray массив объектов

Сообщение rezak90 » 29 сен 2013, 12:58

ну вот наконец то... приятней же когда сам разбираешься? но коллекции за один день не учатся, так что лучше всё таки подучить джаву.
R.id.team
Политика на форуме запрещена

Ответить