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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.83
Sanu0074
58 / 58 / 2
Регистрация: 14.06.2010
Сообщений: 1,189
Записей в блоге: 5
#1

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

18.12.2013, 13:57. Просмотров 3449. Ответов 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 сервера - Программирование Android
Стоит задача: получить с сервера данные в JSON формате. На сервере используется Basic Authentication. Логин пароль нужно передавать у...

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

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

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

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

Получение текста с сервера - Программирование Android
Здраствуйте, как получить текст с сервера? Например, файл расположен по пути test.com/test.txt. Мне требуется получить с него текст и...

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 / 2
Регистрация: 14.06.2010
Сообщений: 1,189
Записей в блоге: 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
18.12.2013, 15:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2013, 15:56
Привет! Вот еще темы с ответами:

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

SocketServer, Client. Получение ответа от сервера - Программирование Android
Уже устал, не пойму где ошибка... Клиент: client = null; dataOutputStream = null; dataInputStream = null; ...

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

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


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

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

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