Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
kievkao
42 / 42 / 2
Регистрация: 22.11.2012
Сообщений: 225
#1

Проблемы получения JSON c Яндекса - Программирование Android

28.05.2013, 17:34. Просмотров 616. Ответов 6
Метки нет (Все метки)

Добрый день!

Решил разобраться с JSON-парсингом. В процессе поиска ресурсов, с которых можно получить данные в этом формате, набрёл на ссылочку с одного форума:
http://api-fotki.yandex.ru/api/users...s/?format=json

Вставляю её в строку браузера - всё ОК, выгружаю кучу данных. Пытаюсь сделать это программно - приходит ответ "Authorization required".
Нашёл другой источник - всё ОК, программа работает. Но остался интерес, почему такое может происходить?

Процесс происходит следующим образом (фрагмент потока):
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// query == "http://api-fotki.yandex.ru/api/users/styleroom/album/49312/photos/?format=json"
DefaultHttpClient   httpclient = new DefaultHttpClient(new BasicHttpParams());
HttpPost httppost = new HttpPost(query);
InputStream inputStream = null;
HttpResponse response;
try {
    response = httpclient.execute(httppost);
    HttpEntity entity = response.getEntity();
    inputStream = entity.getContent();
            
    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8);
            
    StringBuilder sb = new StringBuilder();
    String line = null;
    while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
    }
            
    String data = sb.toString();
Кстати, если кто-то считает, что я не оптимально реализовал процесс парсинга - буду рад замечаниям, т.к. пока нахожусь в процессе обучения.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2013, 17:34     Проблемы получения JSON c Яндекса
Посмотрите здесь:

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

Не работает код получения html - Программирование Android
Здравствуйте. Пытаюсь освоить работу с интернетом. В коде происходит что-то странное и не понятное для меня)) Подскажите, пожалуйста,...

Код получения MAC адреса wifi на android 6 - Программирование Android
Привет. Нагуглил код http://stackoverflow.com/questions/33103798/how-to-get-wi-fi-mac-address-in-android-marshmallow MAC...

Подскажите программу для получения опыта работы с SQLite - Программирование Android
подскажите программу потренироваться-поучится работы с SQLite. так чтобы можно было бы создавать на девайсе БД, таблицы, записи, тригеры и...

Способы получения денег с Google Play для Украины - Программирование Android
Есть у меня пару шикарных идей которые хотел бы реализовать в Google Play. Но как оказалось Google не ведет выплаты в Украину, но охотно...

Как выполнить запрос на получения url для загрузки картинки - Программирование Android
как выполнить запрос на получения url для загрузки картинки в одноклассниках?? можете привести фрагмент кода?? Это url я могу получить...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
28.05.2013, 21:13     Проблемы получения JSON c Яндекса #2
используйте HttpGet а не HttpPost.
kievkao
42 / 42 / 2
Регистрация: 22.11.2012
Сообщений: 225
29.05.2013, 11:02  [ТС]     Проблемы получения JSON c Яндекса #3
Спасибо, V0v1k! Как-то я невнимательно писал..))
haribo
41 / 41 / 3
Регистрация: 26.05.2013
Сообщений: 160
30.05.2013, 01:01     Проблемы получения JSON c Яндекса #4
Не вижу я в коде процесс парсинга :-)
kievkao
42 / 42 / 2
Регистрация: 22.11.2012
Сообщений: 225
30.05.2013, 10:46  [ТС]     Проблемы получения JSON c Яндекса #5
Ну, с самим разбором принятой информаци проблем не возникло)) Я выделил в сообщении только процесс получения данных.
haribo
41 / 41 / 3
Регистрация: 26.05.2013
Сообщений: 160
30.05.2013, 11:03     Проблемы получения JSON c Яндекса #6
Цитата Сообщение от kievkao Посмотреть сообщение
Кстати, если кто-то считает, что я не оптимально реализовал процесс парсинга - буду рад замечаниям, т.к. пока нахожусь в процессе обучения.
Тогда это зачем?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2013, 16:49     Проблемы получения JSON c Яндекса
Еще ссылки по теме:

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

Обработка Json - Программирование Android
Всем доброго времени суток! Подскажите, пожалуйста, что в моем коде не так: public ArrayList<String> parseCategory(String input) { ...

Парсинг JSON - Программирование Android
Доброй ночи! Есть задача распарсить JSON не зная изначально сколько и чего там находится, а так же не зная ни имен ни другой инфы, кроме...

Парсинг JSON - Программирование Android
Дали задание Мне надо воссоздать структуру JSON в сообственных объектах. Т.е. парсить надо не в String (например), а сделать вот что: -...


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

Или воспользуйтесь поиском по форуму:
kievkao
42 / 42 / 2
Регистрация: 22.11.2012
Сообщений: 225
30.05.2013, 16:49  [ТС]     Проблемы получения JSON c Яндекса #7
Действительно))
Буду вам благодарен, haribo, если вы (и кто-то ещё, кто зайдет в эту тему) обратит внимание на сам процесс разбора данных!
Кода много, приведу ключевые моменты:

1. Я проанализировал составляющие тех данных, которые забираю и создал класс (за неимением в Java структур, как в Си), в котором буду это всё хранить:
Java
1
2
3
4
5
6
7
8
9
10
public class JSON_Struct {
    
    String          summary;
    ArrayList<Author> authors = new ArrayList<Author>();
    String          title;
    String          updated;
    int             imageCount;
    ArrayList<Entry> entries = new ArrayList<Entry>();
    Links           links = new Links();
}
Соответственно, сделал подклассы для "объёмных" элементов этой структуры:
Java
1
2
3
4
5
6
7
8
class Entry {
    String summary;
    String tags;
    String edited;
    String hideOriginal;
    String disableComments;
    Img imgs = new Img();
}
И т.д. - все созданные мною вложенные классы приводить нет смысла.

Собственно, моя ф-ция парсинга, на вход которой идёт строка, полученная мною после успешной обработки GET-запроса:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
JSON_Struct ParseJSON(String data) {
                
    JSONObject jObj;
           JSON_Struct json;
    try {
        jObj = new JSONObject(data);
        json = new JSON_Struct();
            
        json.summary    =   jObj.getString("summary");
        json.title  =   jObj.getString("title");
        json.updated    =   jObj.getString("updated");
        json.imageCount =   jObj.getInt("imageCount");
        json.links  =   getLinks(jObj.getJSONObject("links"));
        json.entries    =   getEntries(jObj.getJSONArray("entries"));
        json.authors    =   getAutors(jObj.getJSONArray("authors"));
            
    } catch (Exception e) {
        e.printStackTrace();
    }
           return json;
}
Ф-ция getEntries():
Java
1
2
3
4
5
6
7
8
9
10
11
12
ArrayList<Entry> getEntries (JSONArray array) {
    ArrayList<Entry> entries = new ArrayList<Entry>();
        
    try {
        for(int i = 0; i < array.length(); i++)
            entries.add(getOneEntry(array.getJSONObject(i)));
        
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return entries;
    }
Соответственно, в ней вызываю написанную мною ф-цию <getOneEntry()>, которая "углубляется" дальше в данные.
getEntries(), getAutors() имеют приблизительно такую же структуру.
---------------------------------------------------------------------

Вот
Если кому-то будет не лень посмотреть мой код - буду благодарен замечанием по общему построению парсинга!
Спасибо

P.S. Сбилось форматирование в некоторых местах((
Yandex
Объявления
30.05.2013, 16:49     Проблемы получения JSON c Яндекса
Ответ Создать тему
Опции темы

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