Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/35: Рейтинг темы: голосов - 35, средняя оценка - 5.00
 Аватар для Sanu0074
59 / 59 / 16
Регистрация: 14.06.2010
Сообщений: 1,190
Записей в блоге: 5

Получение JSON с сервера

18.12.2013, 13:57. Показов 7170. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть класс который принимает строку URL и возвращает JSONObject

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
public class Json {
    
    public static JSONObject getJson(String url){
        
        InputStream is = null;
        String result = "";
        JSONObject jsonObject = null;
        Log.d("mylog", "http_url="+url);
        // HTTP
        try {           
            HttpClient httpclient = new DefaultHttpClient(); // for port 80 requests!
            HttpPost httppost = new HttpPost(url);
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            is = entity.getContent();
        } catch(Exception e) {
            return null;
        }
        Log.d("mylog", "// Read response to string");
        // Read response to string
        try {           
            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"utf-8"),8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            result = sb.toString();  
            Log.d("mylog", "result="+result);
        } catch(Exception e) {
            return null;
        }
 
        // Convert string to object
        try {
            jsonObject = new JSONObject(result);            
        } catch(JSONException e) {
            return null;
        }
        Log.d("mylog", "jsonObject="+jsonObject);
        return jsonObject;
 
    }
    
}
Вызов из активити (запись в лог):
Java
1
Log.d("mylog", "JSON > "+Json.getJson("http://home-android.ru/client/autch"));
В лог попадает null, не пойму почему, даже в классе Json процедура не доходит до строки: Log.d("mylog", "// Read response to string");

В чем тут проблема?

Добавлено через 52 минуты
сделал в новом потоке, проблема решилась:
Java
1
2
3
4
5
6
new Thread() {  //открываем новый поток
            @Override
            public void run() {
                Log.d("mylog", "JSON > "+Json.getJson("http://home-android.ru/client/autch"));
            }
        }.start();
но теперь в логе это:
Java
1
2
3
4
12-18 11:41:04.544: D/mylog(16566): http_url=http://home-android.ru/client/autch 
12-18 11:41:04.944: D/mylog(16566): // Read response to string 
12-18 11:41:04.944: D/mylog(16566): result={"login":"sanu0074","pass":"pwd2"} 
12-18 11:41:04.964: D/mylog(16566): JSON > null
т.е. строку от сервера получает, а JSONObject возвращать нехочет... т.е. ошибка на этом участке:
Java
1
2
3
4
5
6
7
8
// Convert string to object 
        try { 
            jsonObject = new JSONObject(result);             
        } catch(JSONException e) { 
            return null; 
        } 
        Log.d("mylog", "jsonObject="+jsonObject); 
        return jsonObject;
Что здесь может быть?
Вот что в стек трейсе:
Code
1
2
3
4
5
6
12-18 11:46:03.914: E/myLOG(17965): org.json.JSONException: Value  of type java.lang.String cannot be converted to JSONObject 
12-18 11:46:03.914: E/myLOG(17965):     at org.json.JSON.typeMismatch(JSON.java:111) 
12-18 11:46:03.914: E/myLOG(17965):     at org.json.JSONObject.<init>(JSONObject.java:158) 
12-18 11:46:03.914: E/myLOG(17965):     at org.json.JSONObject.<init>(JSONObject.java:171) 
12-18 11:46:03.914: E/myLOG(17965):     at ru.homeandroid.Json.getJson(Json.java:53) 
12-18 11:46:03.914: E/myLOG(17965):     at ru.homeandroid.MainActivity$1.run(MainActivity.java:98)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.12.2013, 13:57
Ответы с готовыми решениями:

Получение JSON с https сервера
Стоит задача: получить с сервера данные в JSON формате. На сервере используется Basic Authentication. Логин пароль нужно передавать у...

Отправка и получение картинок JSON
Всем привет, может кто подскажет простой пример того, как: 1 преобразовать Bitmap изображение и кинуть его на сервер 2 имея ссылку с...

Получение ответа в формате json
пытаюсь получить ответ в формате json от моего php скрипта и разобрать его. В общих чертах: new...

3
 Аватар для GukZiLLA
36 / 36 / 2
Регистрация: 30.11.2013
Сообщений: 102
18.12.2013, 15:25
У Вас что-то с джейсоном не то, может какие-то невидимые символы дописываются.
Если исправить метод, чтобы возвращал String, то лог нормально показывает.

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
public static class Json {
        
        public static String getJson(String url){
            
            InputStream is = null;
            String result = "";
            JSONObject jsonObject = null;
            Log.d("mylog", "http_url="+url);
            // HTTP
            try {           
                HttpClient httpclient = new DefaultHttpClient(); // for port 80 requests!
                HttpPost httppost = new HttpPost(url);
                HttpResponse response = httpclient.execute(httppost);
                HttpEntity entity = response.getEntity();
                is = entity.getContent();
            } catch(Exception e) {
                return null;
            }
            Log.d("mylog", "// Read response to string");
            // Read response to string
            try {           
                BufferedReader reader = new BufferedReader(new InputStreamReader(is,"utf-8"),8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                    sb.append(line + "\n");
                }
                is.close();
                result = sb.toString();  
                Log.d("mylog", "result="+result);
            } catch(Exception e) {
                return null;
            }
     
            Log.d("mylog", "jsonObject="+jsonObject);
            return result;
     
        }
        
    }
Добавлено через 10 минут
п»ї{"login":"sanu0074","pass":"pwd2"}
1
 Аватар для Sanu0074
59 / 59 / 16
Регистрация: 14.06.2010
Сообщений: 1,190
Записей в блоге: 5
18.12.2013, 15:40  [ТС]
вот решение проблемы:
Java
1
jsonObject = new JSONObject(result.substring(result.indexOf("{"), result.lastIndexOf("}") + 1));
0
 Аватар для GukZiLLA
36 / 36 / 2
Регистрация: 30.11.2013
Сообщений: 102
18.12.2013, 15:56
Цитата Сообщение от Sanu0074 Посмотреть сообщение
вот решение проблемы:
Ну, костыль работать будет, но это не решение проблемы.
Лучше навести порядок в кодировке на сервере)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.12.2013, 15:56
Помогаю со студенческими работами здесь

Парсинг JSON ответа от сервера
Здравствуйте друзья, давно не заходил к вам в гости. Столкнулся с таким интересным (интересно построенным) ответом от сервера в формате...

Получение данных json после авторизации
Всем привет. Возникла такая проблема. Авторизуюсь на сайте через OKHttp. После авторизации мне необходимо, получить данные по URL. ...

Получение json строки и ее вывод в консоль
Доброго времени суток. Знаю, что в интернете полно ресурсов на тему json, но не могу найти объяснения, как оно полностью работает. Я...

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

Получение JSON от сервера, замена кавычек
Доброго времени суток. Пишу парсер и столкнулся с проблемой: Посылая запрос на сервер, получаю ответ в JSON формате, но когда забираю...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru