Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
NOSC
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
#1

Подскажите как правильно распарсить json - Программирование Android

06.03.2014, 08:40. Просмотров 1245. Ответов 4
Метки нет (Все метки)

Доброго дня.
Никогда не сталкивался с вопросом, своими силами на примерах из гугла не получилось. Можете объяснить как распарсить json ответ от Вконтакте, чтобы потом его в listview запихнуть?
Спасибо.
Мой код:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
........
        Button go = (Button)findViewById(R.id.button1);
        go(new OnClickListener() {
             
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    postToWall();
                }
            }); 
        ListView list = (ListView)findViewById(R.id.listView1);     
    }
 
    class VkontakteWebViewClient extends WebViewClient {
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
            parseUrl(url);
        }
    }
    
    
    private void startLoginActivity() {
        Intent intent = new Intent();
        intent.setClass(this, Login.class);
        startActivityForResult(intent, REQUEST_LOGIN);
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_LOGIN) {
            if (resultCode == RESULT_OK) {
                //авторизовались успешно 
                Account.access_token=data.getStringExtra("token");
                account.user_id=data.getLongExtra("user_id", 0);
                account.save(MainActivity.this);
                api=new Api(Account.access_token, Constants.API_ID);
                
            }
        }
    }
    private void postToWall() {
        //Общение с сервером в отдельном потоке чтобы не блокировать UI поток
        new Thread(){
            @Override
            public void run(){
                try {
                    
                    ArrayList<WallMessage> url = api.getWallMessages((long) -62615727, 50, 0, "owner");
                    web_vk.loadUrl(url);
                    //Показать сообщение в UI потоке 
                    runOnUiThread(successRunnable);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }.start();
    }
    private void parseUrl(String url) {
        try {
            if(url==null)
                return;
            Log.i(TAG, "url="+url);
            if(url.startsWith(Auth.redirect_url))
            {
                if(!url.contains("error=")){
                    String[] auth=Auth.parseRedirectUrl(url);
                    Intent intent=new Intent();
                    intent.putExtra("token", auth[0]);
                    intent.putExtra("user_id", Long.parseLong(auth[1]));
                    setResult(Activity.RESULT_OK, intent);
                }
                finish();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    Runnable successRunnable=new Runnable(){
        @Override
        public void run() {
            Toast.makeText(getApplicationContext(), "Запись успешно добавлена", Toast.LENGTH_LONG).show();
        }
    };
}


Вот ответ от сервера:
Кликните здесь для просмотра всего текста
esponse={"response":{"count":393,"items":[{"id":860,"from_id":-62615727,"to_id":-62615727,"date":1393990767,"post_type":"post","text":"","can_edit":1,"created_by":196835899,"can_delete":1,"attachments" :[{"type":"photo","photo":{"id":322523993,"album_id":-7,"owner_id":-62615727,"user_id":100,"photo_75":"http:\/\/cs408230.vk.me\/v408230899\/a49f\/MAYXmvyrRY0.jpg","photo_130":"http:\/\/cs408230.vk.me\/v408230899\/a4a0\/S7_jrYK-FtA.jpg","photo_604":"http:\/\/cs408230.vk.me\/v408230899\/a4a1\/NrycYwsyjcU.jpg","width":600,"height":516,"text":"","date":1393990767,"post_id":860,"access_key":"4928ad39f5e5fdcc1c"}}],"post_source":{"platform":"iphone","type":"api"},"comments":{"count":0,"can_post":1},"likes":{"count":2,"user_likes":0, "can_like":1,"can_publish":1},"reposts":{"count":0,"user_reposted":0}},{"id":859,"from_id":-62615727,"to_id":-62615727,"date":1393990755,"post_type":"post","text":"","can_edit":1,"created_by":196835899,"can_delete":1,"attachments" :[{"type":"photo","photo":{"id":322523989,"album_id":-7,"owner_id":-62615727,"user_id":100,"photo_75":"http:\/\/cs408230.vk.me\/v408230899\/a498\/tRXWLHlEBPU.jpg","photo_130":"http:\/\/cs408230.vk.me\/v408230899\/a499\/2wBy5zbt6Jk.jpg","photo_604":"http:\/\/cs408230.vk.me\/v408230899\/a49a\/LvNseP5-U-k.jpg","width":600,"height":500,"text":"","date":1393990755,"post_id":859,"access_key":"fabb58173012638a6e"}}],"post_source":{"platform":"iphone","type":"api"},"comments":{"count":0,"can_post":1},"likes":{"count":3,"user_likes":0, "can_like":1,"can_publish":1},"reposts":{"count":1,"user_reposted":0}},{"id":858,"from_id":-62615727,"to_id":-62615727,"date":1393946378,"post_type":"post","text":"","can_edit":1,"created_by":196835899,"can_delete":1,"attachments" :[{"type":"photo","photo":{"id":322484252,"album_id":-7,"owner_id":-62615727,"user_id":100,"photo_75":"http:\/\/cs607122.vk.me\/v607122899\/2812\/O9e13uQR8vI.jpg","photo_130":"http:\/\/cs607122.vk.me\/v607122899\/2813\/9ix9eZBwSUE.jpg","photo_604":"http:\/\/cs607122.vk.me\/v607122899\/2814\/zcWhp-PqsIo.jpg","width":600,"height":426,"text":"","date":1393946378,"post_id":858,"access_key":"ef3f37d1208ef89824"}}],"post_source":{"platform":"ipad","type":"api"},"comments":{"count":0,"can_post":1},"likes":{"count":5,"user_likes":0,"c an_like":1,"can_publish":1},"reposts":{"count":0,"user_reposted":0}},{"id":857,"from_id":-62615727,"to_id":-62615727,"date":1393946366,"post_type":"post","text":"","can_edit":1,"created_by":196835899,"can_delete":1,"attachments" :[{"type":"photo","photo":{"id":322484235,"album_id":-7,"owner_id":-62615727,"user_id":100,"photo_75":"http:\/\/cs607122.vk.me\/v607122899\/280b\/GP2ZHSlVEio.jpg","photo_130":"http:\/\/cs607122.vk.me\/v607122899\/280c\/XY8cZ7pWDqc.jpg","photo_604":"http:\/\/cs607122.vk.me\/v607122899\/280d\/o6XubNafa-w.jpg","width":600,"height":489,"text":"","date":1393946369,"post_id":857,"access_key":"77b04ade5dc4d89383"}}],"post_source":{"platform":"ipad","type":"api"},"comments":{"count":0,"can_post":1},"likes":{"count":3,"user_likes":0,"c an_like":1,"can_publish":1},"reposts":{"count":0,"user_reposted":0}},{"id":856,"from_id":-62615727,"to_id":-62615727,"date":1393944000,"post_type":"post","text":"- ???????, ? ?? ????? ????? ??????? ??????\n- ?????, ??? ???, ?????? ????????.","can_edit":1,"created_by":196835899,"can_delete":1,"attachments":[{"type":"photo","photo":{"id":322370132,"album_id":-7,"owner_id":-62615727,"user_id":100,"photo_75":"http:\/\/cs310319.vk.me\/v310319899\/7ebf\/_EFPFKqAQXw.jpg","photo_130":"http:\/\/cs310319.vk.me\/v310319899\/7ec0\/Y-ZJKiYiehc.jpg","photo_604":"http:\/\/cs310319.vk.me\/v310319899\/7ec1\/4NGPz7MfNX0.jpg","width":400,"height":550,"text":"","date":1393824502,"access_key":"539a807e9e8360976a"}},{"type":"photo ","photo":{"id":322370133,"album_id":-7,"owner_id":-62615727,"user_id":100,"photo_75":"http:\/\/cs310319.vk.me\/v310319899\/7ec6\/Wj3LaplVQyA.jpg","photo_130":"http:\/\/cs310319.vk.me\/v310319899\/7ec7\/Szaea4YoKCs.jpg","photo_604":"http:\/\/cs310319.vk.me\/v310319899\/7e
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.03.2014, 08:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Подскажите как правильно распарсить json (Программирование Android):

Как правильно распарсить Json? - Программирование Android
protected String doInBackground(String... args) { // Будет хранить параметры List&lt;NameValuePair&gt; params = new...

Как распарсить такой JSON - Программирование Android
{&quot;response&quot;:} Как распарарсить такой JSon нужно выделить из массива первое число а дальше все uid и body?? Можете подсказать? ...

Как распарсить JSON c Вконтакте API - Программирование Android
Подскажите как распарсить JSON c Вконтакте API. Вот вид JSON: { &quot;response&quot;: , &quot;comments&quot;: { ...

Как распарсить Json-ответ Android приложении? - Программирование Android
Добрый день! Android приложение получает ответ от сервера в формате Json. Есть 2 варианта ответа : 1. 2. Какой лучше...

Как правильно парсить json с сервера - Программирование Android
Здравствуйте. У меня есть JSON, полученный с сервера, имеет приблизительно такой вид: В приложении будет два таба, в...

Подскажите как правильно организовать работу с БД - Программирование Android
Есть класс DBHelper: public class DBHelper extends SQLiteOpenHelper { public static final String GET_PRICE = &quot;SELECT * from...

4
zulkis
683 / 610 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
06.03.2014, 08:54 #2
Используйте Google gson
0
NOSC
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
06.03.2014, 10:41  [ТС] #3
Цитата Сообщение от zulkis Посмотреть сообщение
Используйте Google gson
Не могу разобраться. Не понимаю что мне с этим делать.
Библиотеку подключил, а каким образом распарсить полученный ответ не могу понять.
Если есть опыт - подскажите пожалуйста.
У меня уходит запрос к API - получаю ответ, далее что я должен сделать? Я должен этот ответ как-то сохранить (в переменную допустим) или разбор на лету происходит?
0
zulkis
683 / 610 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
06.03.2014, 11:29 #4
Читайте это.
Нужно будет создавать классы для правильного парсинга с использованием @SerializedName.

Как-то так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
public class VKResponse implements Serializable {
    @SerializedName("count")
    private int mCount;
 
    @SerializedName("items")
    private List<Item> mItems;
 
    public int getCount() {
        return mCount;
    }
 
    public List<Item> getItems() {
        return mItems;
    }
    public void setCount(int count) {
        mCount = count;
    }
 
    public void setItems(List<Item> items) {
        mItems = items;
    }
}
 
public class Item implements Serializable {
    @SerializedName("id")
    private int mId;
 
    @SerializedName("text")
    private String mText;
 
    public int getId() {
        return mId;
    }
 
    public String getText() {
        return mText;
    }
    public void setId(int id) {
        mId = id;
    }
 
    public void setText(String text) {
        mText = text;
    }
}
Затем парсинг:
Java
1
2
Gson gson = new Gson();
VKResponse instance = gson.fromJson(<#Stream or String...#>, VKResponse.class);
1
NOSC
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
06.03.2014, 11:30  [ТС] #5
Цитата Сообщение от zulkis Посмотреть сообщение
Читайте это.
Спасибо - разбираюсь
0
06.03.2014, 11:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.03.2014, 11:30
Привет! Вот еще темы с ответами:

Подскажите как правильно парсить HTML страницу - Программирование Android
Код у меня уже имеется но я так и не разобрался с document.select(&quot;&quot;); у меня только title получается парсить,но как например парсить такой...

Подскажите БД для хранения сложных JSON-объектов - Программирование Android
А также - выборки по полям и поддержка иерархии объектов. Например JSONObject в нем вложенный еще один JSONObject, чтобы можно было...

Как распарсить страницу и записать данные в ListView? - Программирование Android
Добрый день , Киборги! Прошлая тема ,созданная мною в данном разделе , касалась вопроса WebView'a ,но теперь все стало предельно ясно. ...

Ошибка - Errororg.json.JSONExceprion: Value bd.json of type java.lang.String cannot be converted to JSONObject - Программирование Android
Здравствуйте! Есть база данных bd.json, которая находится в проекте в папке assets. Вот содержимое базы данных; { &quot;name&quot;:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru