Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.83
Sanu0074
58 / 58 / 16
Регистрация: 14.06.2010
Сообщений: 1,190
Записей в блоге: 5
#1

Получение JSON с сервера - Программирование Android

18.12.2013, 13:57. Просмотров 3898. Ответов 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;
Что здесь может быть?
Вот что в стек трейсе:
Код
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.12.2013, 13:57
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Получение JSON с сервера (Программирование Android):

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

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

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

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

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

Получение текста с сервера
Здраствуйте, как получить текст с сервера? Например, файл расположен по пути...

3
GukZiLLA
35 / 35 / 2
Регистрация: 30.11.2013
Сообщений: 102
18.12.2013, 15:25 #2
У Вас что-то с джейсоном не то, может какие-то невидимые символы дописываются.
Если исправить метод, чтобы возвращал 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
58 / 58 / 16
Регистрация: 14.06.2010
Сообщений: 1,190
Записей в блоге: 5
18.12.2013, 15:40  [ТС] #3
вот решение проблемы:
Java
1
jsonObject = new JSONObject(result.substring(result.indexOf("{"), result.lastIndexOf("}") + 1));
0
GukZiLLA
35 / 35 / 2
Регистрация: 30.11.2013
Сообщений: 102
18.12.2013, 15:56 #4
Цитата Сообщение от Sanu0074 Посмотреть сообщение
вот решение проблемы:
Ну, костыль работать будет, но это не решение проблемы.
Лучше навести порядок в кодировке на сервере)
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2013, 15:56
Привет! Вот еще темы с решениями:

HttpUrlConnetcion получение ответа от сервера
Всем привет, как то уже задавал вопрос про HttpUrlConnection, вроде разобрался...

Получение сообщений от сервера без запроса
Среди существующих тем не нашёл ответа на свой вопрос, поэтому решил задать...

Отправка и получение данных (запроса) из сервера
Помогите пожалуйста! Мне нужно отправить данные на сервер, желательно чтобы и в...

Получение информации с сервера и вывод на экран
Доброго времени суток. Есть сервер на python, суть его работы в том что он...


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

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

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