Магия при работе с json

Lucifer777
Сообщения: 122
Зарегистрирован: 18 ноя 2013, 17:53

Магия при работе с json

Сообщение Lucifer777 » 06 фев 2014, 15:10

Ситуация такая:
Попытка №1 скачать json и сделать парсинг:
Подключаюсь к интернету через свой HTC Radar по wifi. Начинаю тянуть json от сюда, приходит ровно половина.
Попытка №2 скачать json и сделать парсинг:
Подключаюсь к нормальному интернету по wifi повторяю процедуру и в классе ServiceHandler вылетает ошибка "java.net.UnknownHostException: Unable to resolve host "rusradio.ru": No address associated with hostname"
За основу было взято вот это творение
Класс ServiceHandler не менялся вообще. Изменён и вынесен в другое место был только класс с парсингом, но в нём как бы проблем нету, всё рушиться из-за ServiceHandler.

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Магия при работе с json

Сообщение altwin » 06 фев 2014, 16:37

что значит приходит половина? как вы это проверяете? в лог выводите или куда? Сообщения в логе обрезаются и это не значит, что пришло не все, проверяйте выводом в файл или при отладке выставляя точки остановы, в IDEA есть возможность просмотреть содержимое переменной в которой json пришел, в eclipse тоже должно быть.
по поводу второго, вы можете к google.com подключиться? пробывали добавить www. подключались без DNS через IP? Попробуйте в начало добавить проверку if host exists, например на google. Уберите http://, или добавьте www, в общем варрианты другие.
Изображение

Lucifer777
Сообщения: 122
Зарегистрирован: 18 ноя 2013, 17:53

Re: Магия при работе с json

Сообщение Lucifer777 » 06 фев 2014, 23:25

altwin писал(а):что значит приходит половина? как вы это проверяете? в лог выводите или куда? Сообщения в логе обрезаются и это не значит, что пришло не все, проверяйте выводом в файл или при отладке выставляя точки остановы, в IDEA есть возможность просмотреть содержимое переменной в которой json пришел, в eclipse тоже должно быть.
по поводу второго, вы можете к google.com подключиться? пробывали добавить www. подключались без DNS через IP? Попробуйте в начало добавить проверку if host exists, например на google. Уберите http://, или добавьте www, в общем варрианты другие.
Значит, что часть массива json отрезается или не до загружается и на месте обрыва ставится многоточие.
Проверяю в режиме отладки, смотрю, что приходит и хранится в переменной.
Подключаюсь без DNS, попробовал убрать http://, добавить www получается такая ошибка:
java.lang.IllegalStateException: Target host must not be null, or set in parameters. scheme=null, host=null, path=www.rusradio.ru/jsonexport.aspx

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

Re: Магия при работе с json

Сообщение rezak90 » 06 фев 2014, 23:41

Lucifer777 писал(а):Значит, что часть массива json отрезается или не до загружается и на месте обрыва ставится многоточие.]
В режиме дебага если toString() возвращает большое количество значений то ставит троеточие и всё не показывает, так что всё приходит нормально
R.id.team
Политика на форуме запрещена

Lucifer777
Сообщения: 122
Зарегистрирован: 18 ноя 2013, 17:53

Re: Магия при работе с json

Сообщение Lucifer777 » 06 фев 2014, 23:43

rezak90 писал(а):
Lucifer777 писал(а):Значит, что часть массива json отрезается или не до загружается и на месте обрыва ставится многоточие.]
В режиме дебага если toString() возвращает большое количество значений то ставит троеточие и всё не показывает, так что всё приходит нормально
Думал об этом но не был уверен.
как же быть тогда?

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Магия при работе с json

Сообщение altwin » 06 фев 2014, 23:48

Lucifer777 писал(а): Значит, что часть массива json отрезается или не до загружается и на месте обрыва ставится многоточие.
Проверяю в режиме отладки, смотрю, что приходит и хранится в переменной.
Вообще так просто не бывает, если json объект приходит не правильный - это ошибка только сервера без варриантов. Но никакого многоточия там быть не должно, многоточие -его только IDE могла поставить вы eclipse пользуетесь? я просто не знаю как он работает и обрезает ли что то. Но с сервера то как может многоточие прийти?
попробывал отправить запрос - response без ошибок, проблемы нет.
вы же браузером обращаетесь на этот адрес все ок? значит вы куда то не туда смотрите. Либо что то не так с запросом.
Изображение

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Магия при работе с json

Сообщение altwin » 06 фев 2014, 23:50

Lucifer777 писал(а):
rezak90 писал(а):
Lucifer777 писал(а):Значит, что часть массива json отрезается или не до загружается и на месте обрыва ставится многоточие.]
В режиме дебага если toString() возвращает большое количество значений то ставит троеточие и всё не показывает, так что всё приходит нормально
Думал об этом но не был уверен.
как же быть тогда?
я же по русски спрашивал как вы смотрите... toString - это не какого отношения к просмотру значения в debug режиме не имеет. Когда вы ставите точку остановки и запускаете debug -ер он показывает переменный, на нужной нажимте правую кнопку мышки и "показать значение".
Изображение

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Магия при работе с json

Сообщение altwin » 06 фев 2014, 23:54

как же быть тогда?
altwin писал(а):... проверяйте выводом в файл или при отладке выставляя точки остановы, в IDEA есть возможность просмотреть содержимое переменной в которой json пришел, в eclipse тоже должно быть.
вы прочитали это в первом сообщении? Выводом в лог или toString вы ничего не проверите.
Изображение

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

Re: Магия при работе с json

Сообщение rezak90 » 06 фев 2014, 23:58

altwin писал(а):toString - это не какого отношения к просмотру значения в debug режиме не имеет.
если не нажимать Watch в контекстном меню, а просто подвести курсор на переменную и выскочит такое контекстное окошечко то вызывается у объекта toString()
R.id.team
Политика на форуме запрещена

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Магия при работе с json

Сообщение altwin » 07 фев 2014, 00:01

rezak90 писал(а):
altwin писал(а):toString - это не какого отношения к просмотру значения в debug режиме не имеет.
если не нажимать Watch в контекстном меню, а просто подвести курсор на переменную и выскочит такое контекстное окошечко то вызывается у объекта toString()
я eclipse никогда не пользовался :) в idea и AS просто нажимаеш view text и все, открывается окошко с удобно отформатированным json (если там он)
просто я никаким местом не думал, что человек, который говорит, что проверяет значение переменной дебагером делает это вызывая toString :) Хотя то, что так делает eclipse я не удивлен, никогда не считаел затмение особо интелектуальным. ))
Изображение

Lucifer777
Сообщения: 122
Зарегистрирован: 18 ноя 2013, 17:53

Re: Магия при работе с json

Сообщение Lucifer777 » 07 фев 2014, 00:04

altwin писал(а):Вообще так просто не бывает, если json объект приходит не правильный - это ошибка только сервера без варриантов. Но никакого многоточия там быть не должно, многоточие -его только IDE могла поставить вы eclipse пользуетесь? я просто не знаю как он работает и обрезает ли что то. Но с сервера то как может многоточие прийти?
попробывал отправить запрос - response без ошибок, проблемы нет.
вы же браузером обращаетесь на этот адрес все ок? значит вы куда то не туда смотрите. Либо что то не так с запросом.
да я использую eclipse. Сервер json выдаёт правильный в этом можно убедится зайдя на него.
altwin писал(а): я же по русски спрашивал как вы смотрите... toString - это не какого отношения к просмотру значения в debug режиме не имеет. Когда вы ставите точку остановки и запускаете debug -ер он показывает переменный, на нужной нажимте правую кнопку мышки и "показать значение".
Я вроде так и делаю. Делаю и вижу, что json, который пришёл- не полный.
altwin писал(а): вы прочитали это в первом сообщении? Выводом в лог или toString вы ничего не проверите.
В лог выводил, там находится тоже самое, что в режиме debug при просмотре значения переменной,в которой сохроняю json. Сохранение json в String происходит таким образом:

HttpGet httpGet = new HttpGet(url);

httpResponse = httpClient.execute(httpGet);

httpEntity = httpResponse.getEntity();
String response = EntityUtils.toString(httpEntity);

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Магия при работе с json

Сообщение altwin » 07 фев 2014, 00:12

Lucifer777 писал(а): В лог выводил, там находится тоже самое, что в режиме debug при просмотре значения переменной,в которой сохроняю json. Сохранение json в String происходит таким образом:

HttpGet httpGet = new HttpGet(url);

httpResponse = httpClient.execute(httpGet);

httpEntity = httpResponse.getEntity();
String response = EntityUtils.toString(httpEntity);
Никогда не делайте так. Все запросы должны быть асинхронны.
пример делает запрос к vk и получает json, url фото категории 605 выводятся в лог(вообще не важно, важен запрос и как он делается)
[syntax=java5]
String url = "https://api.vk.com/method/photos.search ... 5000&v=5.7";
AsyncHttpClient client = new AsyncHttpClient();
client.get(url, new AsyncHttpResponseHandler() {

@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
super.onSuccess(statusCode, headers, responseBody);

try {
JSONObject jsonObject = new JSONObject(new String(responseBody));
JSONObject jsonResult = jsonObject.getJSONObject("response");
JSONArray jArray = jsonResult.getJSONArray("items");

for (int i = 0; i < jArray.length(); i++) {
try {
JSONObject oneObject = jArray.getJSONObject(i);

Log.d(LOG_TAG, oneObject.getInt("id")
+ ": "
+ oneObject.getString("photo_604"));
} catch (JSONException e) {
e.printStackTrace();
Log.d(LOG_TAG, "JSONException in for loop");
}
}
} catch (JSONException e) {
e.printStackTrace();
Log.d(LOG_TAG, "JSONException with get json");
}
}
});
[/syntax]
1. Запрос асинхронный
2. Не надо пихать json в строку, для этого есть JSONObject
Изображение

Lucifer777
Сообщения: 122
Зарегистрирован: 18 ноя 2013, 17:53

Re: Магия при работе с json

Сообщение Lucifer777 » 07 фев 2014, 00:14

altwin писал(а):просто я никаким местом не думал, что человек, который говорит, что проверяет значение переменной дебагером делает это вызывая toString
Так, что бы наверняка, что я всё правильно смотрю:
Вложения
Снимок.PNG
Снимок.PNG (11.75 КБ) 14796 просмотров

Lucifer777
Сообщения: 122
Зарегистрирован: 18 ноя 2013, 17:53

Re: Магия при работе с json

Сообщение Lucifer777 » 07 фев 2014, 00:19

altwin писал(а):1. Запрос асинхронный
2. Не надо пихать json в строку, для этого есть JSONObject
Хорошо, спасибо! Попробую и отпишусь о результате. Но одна проблема так и остаётся не решенной и какой-то мистикой. Почему когда интернет раздаю с телефона по wifi хоть что-то да грузит, а когда подключаюсь к dsl модему то происходит облом?

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Магия при работе с json

Сообщение altwin » 07 фев 2014, 00:24

Lucifer777 писал(а):
altwin писал(а):1. Запрос асинхронный
2. Не надо пихать json в строку, для этого есть JSONObject
Хорошо, спасибо! Попробую и отпишусь о результате. Но одна проблема так и остаётся не решенной и какой-то мистикой. Почему когда интернет раздаю с телефона по wifi хоть что-то да грузит, а когда подключаюсь к dsl модему то происходит облом?
возможно проблемы с прокси, но опять же что такое облом, что приходит в ответе с сервера? там даже если bad request есть ответ. Если вообще не уходит запрос, то проблема в настройках сети.
По поводо дебага я уже понял, что смотрите вы правильно, просто это не поможет если вы изначально в строку пытаетесь все засунуть :)

P.S> я чуть не забыл... в примере, который приводил для упрощения запроса используется AsyncHttpClient, это клас отсюда: http://loopj.com/android-async-http/?ut ... ign=Buffer
просто добавьте jar, зависимостей нет.
Изображение

Lucifer777
Сообщения: 122
Зарегистрирован: 18 ноя 2013, 17:53

Re: Магия при работе с json

Сообщение Lucifer777 » 07 фев 2014, 00:31

altwin писал(а):
Lucifer777 писал(а):
altwin писал(а):1. Запрос асинхронный
2. Не надо пихать json в строку, для этого есть JSONObject
Хорошо, спасибо! Попробую и отпишусь о результате. Но одна проблема так и остаётся не решенной и какой-то мистикой. Почему когда интернет раздаю с телефона по wifi хоть что-то да грузит, а когда подключаюсь к dsl модему то происходит облом?
возможно проблемы с прокси, но опять же что такое облом, что приходит в ответе с сервера? там даже если bad request есть ответ. Если вообще не уходит запрос, то проблема в настройках сети.
По поводо дебага я уже понял, что смотрите вы правильно, просто это не поможет если вы изначально в строку пытаетесь все засунуть :)

P.S> я чуть не забыл... в примере, который приводил для упрощения запроса используется AsyncHttpClient, это клас отсюда: http://loopj.com/android-async-http/?ut ... ign=Buffer
просто добавьте jar, зависимостей нет.
вот так выглядит облом: "java.net.UnknownHostException: Unable to resolve host "rusradio.ru": No address associated with hostname"
Прокси или каких-то замудренных настроек нету. Обычный домашний интернет.

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Магия при работе с json

Сообщение altwin » 07 фев 2014, 00:37

ну вообще это ошибка хоста, самая частая причина отсутсвие в манифесте:
<uses-permission android:name="android.permission.INTERNET"/>
вы случайно не linux используете? был такой баг: http://bugs.java.com/bugdatabase/view_b ... id=4665037, попробуйте в проекте использовать другую версию java.
Но вообще странно, хорошо бы к wifi соседей подключиться и попробывать :)
Последний раз редактировалось altwin 07 фев 2014, 00:47, всего редактировалось 2 раза.
Изображение

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

Re: Магия при работе с json

Сообщение rezak90 » 07 фев 2014, 00:40

Lucifer777 писал(а):В лог выводил, там находится тоже самое, что в режиме debug при просмотре значения переменной,в которой сохроняю json.
С LogCat тоже самое, если его слишком много он его обрежет.
R.id.team
Политика на форуме запрещена

Lucifer777
Сообщения: 122
Зарегистрирован: 18 ноя 2013, 17:53

Re: Магия при работе с json

Сообщение Lucifer777 » 07 фев 2014, 00:53

altwin писал(а):ну вообще это ошибка хоста, самая частая причина отсутсвие в манифесте:
<uses-permission android:name="android.permission.INTERNET"/>
вы случайно не linux используете? был такой баг: http://bugs.java.com/bugdatabase/view_b ... id=4665037, попробуйте в проекте использовать другую версию java.
Но вообще странно, хорошо бы к wifi соседей подключиться и попробывать :)
нет, у меня win 8.1 prof.
Это первым делом было прописано)))
<uses-permission android:name="android.permission.INTERNET"/>
Я в частном доме живу, тут тяжело соседский wifi найти((

Ладно, это не основная проблема-если решу, то отпишусь.

Аватара пользователя
mdzht
Сообщения: 124
Зарегистрирован: 11 ноя 2013, 11:33
Откуда: fock it
Контактная информация:

Re: Магия при работе с json

Сообщение mdzht » 07 фев 2014, 14:13

Валерия Пендраковский снял фильм про Lucifer777, фильм называется "Ушел и не вернулся"
«Life is too short to spend rewriting code»

Ответить