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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.71
EDIsaev
4 / 4 / 0
Регистрация: 27.03.2012
Сообщений: 132
#1

Получение ответа в формате json - Android

18.12.2013, 13:04. Просмотров 2676. Ответов 16
Метки нет (Все метки)

пытаюсь получить ответ в формате json от моего php скрипта и разобрать его.
В общих чертах:
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
    new RequestTask().execute("http://isaev.url.ph/getQuery.php");
...
  class RequestTask extends AsyncTask<String, String, String> {
 
    @Override
    protected String doInBackground(String... params) {
 
 
      Log.d(LOG_TAG,"#doInBackground#");
      try {
        //создаем запрос на сервер
        HttpParams httpParams=new BasicHttpParams();
        HttpProtocolParams.setVersion(httpParams,HttpVersion.HTTP_1_1);
        HttpProtocolParams.setContentCharset(httpParams,"UTF-8");
        HttpProtocolParams.setHttpElementCharset(httpParams,"UTF-8");
        //   httpParams.setBooleanParameter("http.protocol.expect-continue",false);
 
        HttpClient hc=new DefaultHttpClient(httpParams);
        hc.getParams().setParameter("http.protocol.version",HttpVersion.HTTP_1_1);
        //hc.getParams().setParameter("http.socket.timeout",new Integer(10000));
        hc.getParams().setParameter("http.protocol.content-charset",HTTP.UTF_8);
        Log.d(LOG_TAG,"  - hc");
        //ResponseHandler<String> res = new BasicResponseHandler();
        //Log.d(LOG_TAG,"  - res");
        //он у нас будет посылать get запрос
        HttpGet getMethod = new HttpGet(params[0]);//(params[0]);
        Log.d(LOG_TAG,"  - getMethod('"+params[0]+"')"+" - "+getMethod.getMethod().toString());
        Log.d(LOG_TAG,"  --URI: "+getMethod.getURI().toString());
        //получаем ответ от сервера
        HttpResponse response = hc.execute(getMethod);
        Log.d(LOG_TAG,"  - response: "+response.getEntity().getContent().toString());
 
        //HttpEntity entity = response.getEntity();
        //Log.d(LOG_TAG,"  - entity"+response.toString());
        //String str = EntityUtils.toString(entity,"UTF-8");
        //Log.d(LOG_TAG,"  - str"+response.toString());
        //JSONArray json = response.toString();
        //Log.d(LOG_TAG,"  - json");
        //Log.d(LOG_TAG,"response: "+json);
 
        try {
          JSONArray arr = new JSONArray((JSONTokener)response.getEntity());
          JSONArray subarr;
          int len=arr.length();
          Log.d(LOG_TAG,"length: "+len);
           for (int i = 0; i < len; i++) {
                subarr=arr.getJSONArray(i);
                String mid = subarr.getString(0);
                String title = subarr.getString(1);
                String language = subarr.getString(2);
                Log.d(LOG_TAG,"Arr["+i+"]: {mid='"+mid+"', title='"+title+"', language='"+language+"'}");
 
           }
           // int id = obj.getInt("id");
//            String str1 = obj.getString("table1");
  //          String str2 = obj.getString("table1_2");
    //        Log.d(LOG_TAG,"str1="+str1+"; str2="+str2);
            //Toast.makeText(getApplicationContext(), "Machine: " + machine,    Toast.LENGTH_SHORT).show();
          //}
        } catch (JSONException jsonEx) {
          Log.e("log_tag","Error parsing data "+jsonEx.toString());
          //Toast.makeText(getApplicationContext(), "fail", Toast.LENGTH_SHORT).show();
        }
 
        //посылаем на вторую активность полученные параметры
        //Intent intent = new Intent(MyActivity.this, SecondActivity.class);
        //то что куда мы будем передавать и что, putExtra(куда, что);
        //intent.putExtra(SecondActivity.JsonURL, response.toString());
        //startActivity(intent);
      } catch (Exception e) {
        System.out.println("Error(): "+e);
      }
      return null;
    }
в общем на строке
Java
1
2
 //получаем ответ от сервера
HttpResponse response = hc.execute(getMethod);
что-то идёт не так... хотя ответ приходит корректно (вижу в Wireshark), а до его тела никак не могу достучаться
на этой строке в логе вижу следующую ошибку
INFO/System.out(340): Error(): java.lang.ClassCastException: org.apache.http.conn.BasicManagedEntity

что я делаю не так?

ps: колдовать пытался на основе этого примера: ссылка
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gabberr
102 / 102 / 17
Регистрация: 13.10.2009
Сообщений: 402
19.12.2013, 10:02     Получение ответа в формате json #2
я так делаю:
в асинхтаске
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
URL url = new URL("http://сайт/?email="
                            + sPref.getString("mail", "") + "&pass="
                            + sPref.getString("pass", ""));
                    HttpURLConnection con = (HttpURLConnection) url.openConnection();
 
                    BufferedReader br = new BufferedReader(
                            new InputStreamReader(con.getInputStream()));
                    StringBuilder sb = new StringBuilder();
                    String line;
                    while ((line = br.readLine()) != null) {
                        sb.append(line + "\n");
                    }
                    br.close();
                    JSONObject jsonObject = new JSONObject(sb.toString());
ASDFD12
33 / 33 / 5
Регистрация: 15.09.2012
Сообщений: 421
19.12.2013, 12:30     Получение ответа в формате json #3
Поставь библиотеку jsoup. Все легко распарсиш.
EDIsaev
4 / 4 / 0
Регистрация: 27.03.2012
Сообщений: 132
19.12.2013, 13:26  [ТС]     Получение ответа в формате json #4
Цитата Сообщение от ASDFD12 Посмотреть сообщение
Поставь библиотеку jsoup. Все легко распарсиш.
она вообще для json предназначена? что-то ни примеров на сайте ни даже упоминания
только html и xml расписаны
да и есть же стандартные методы, зачем велосипеды то цеплять?
dajver
407 / 271 / 18
Регистрация: 18.09.2010
Сообщений: 1,106
20.12.2013, 02:25     Получение ответа в формате json #5
http://dajver.blogspot.com/2013/02/json.html
EDIsaev
4 / 4 / 0
Регистрация: 27.03.2012
Сообщений: 132
20.12.2013, 13:40  [ТС]     Получение ответа в формате json #6
dajver, вот собрал ваш пример, серверную часть тоже загрузил, выдаёт ошибку при парсинге
Java
1
2
3
12-20 09:06:30.900: INFO/ActivityManager(59): Starting activity: Intent { cmp=ru.example.GetJsonTest/.SecondActivity (has extras) }
12-20 09:06:30.970: ERROR/log_tag(449): Error parsing data org.json.JSONException: Value ГЇ»Вї of type java.lang.String cannot be converted to JSONObject
12-20 09:06:31.240: INFO/ActivityManager(59): Displayed activity ru.example.GetJsonTest/.SecondActivity: 321 ms (total 321 ms)
проект в аттаче, на сервере файл оставил для теста
Вложения
Тип файла: 7z GetJsonTest.7z (24.2 Кб, 8 просмотров)
dajver
407 / 271 / 18
Регистрация: 18.09.2010
Сообщений: 1,106
20.12.2013, 13:48     Получение ответа в формате json #7
Цитата Сообщение от EDIsaev Посмотреть сообщение
dajver, вот собрал ваш пример, серверную часть тоже загрузил, выдаёт ошибку при парсинге
Java
1
2
3
12-20 09:06:30.900: INFO/ActivityManager(59): Starting activity: Intent { cmp=ru.example.GetJsonTest/.SecondActivity (has extras) }
12-20 09:06:30.970: ERROR/log_tag(449): Error parsing data org.json.JSONException: Value ГЇ»Вї of type java.lang.String cannot be converted to JSONObject
12-20 09:06:31.240: INFO/ActivityManager(59): Displayed activity ru.example.GetJsonTest/.SecondActivity: 321 ms (total 321 ms)
проект в аттаче, на сервере файл оставил для теста
или у вас джсон не правильно парсится и из за этого ошибка или просто активность не объявлена в манифесте

UPD:

В общем скачал проект, хз как у вас там выглядит ваш джсон файл, с манифестом все ок но на второй активности вам нужно изменить параметры на те которые вы ходите спарсить firstName и secondName, на свои параметры. тогда и ошибок не будет.
EDIsaev
4 / 4 / 0
Регистрация: 27.03.2012
Сообщений: 132
20.12.2013, 14:02  [ТС]     Получение ответа в формате json #8
Цитата Сообщение от dajver Посмотреть сообщение
но на второй активности вам нужно изменить параметры на те которые вы ходите спарсить firstName и secondName, на свои параметры. тогда и ошибок не будет.
я ничего своего не вставлял... просто вначале json приходит какой-то мусор, похожий на длину строки, как он туда вписыается не могу пока найти... на нём и спотыкается парсер и выводит в ошибку
на сервере:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php // серверная часть вывода json
 
$login = $_POST['login'];
$pass = $_POST['pass'];
if($login == "user" & $pass == "pass") {
?>{
"data":[
{
"firstName":"John",
"lastName":"Doe"
},
{
"firstName":"Anna",
"lastName":"Smith"
},
{
"firstName":"Peter",
"lastName":"Jones"
}
]
}<?php }
?>
получаем:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
DEBUG/log_tag(533): Result: ГЇ»Вї"data":[
        {
        "firstName":"John",
        "lastName":"Doe"
        },
        {
        "firstName":"Anna",
        "lastName":"Smith"
        },
        {
        "firstName":"Peter",
        "lastName":"Jones"
        }
        ]
dajver
407 / 271 / 18
Регистрация: 18.09.2010
Сообщений: 1,106
20.12.2013, 14:08     Получение ответа в формате json #9
Скорей всего это дописывает не сервак, а текстовый редактор в котором вы сохранили файл
EDIsaev
4 / 4 / 0
Регистрация: 27.03.2012
Сообщений: 132
20.12.2013, 14:12  [ТС]     Получение ответа в формате json #10
Цитата Сообщение от EDIsaev Посмотреть сообщение
я ничего своего не вставлял... просто вначале json приходит какой-то мусор, в виде 3х байтов, как он туда вписыается не могу пока найти... на нём и спотыкается парсер и выводит в ошибку
на сервере:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php // серверная часть вывода json
 
$login = $_POST['login'];
$pass = $_POST['pass'];
if($login == "user" & $pass == "pass") {
?>{
"data":[
{
"firstName":"John",
"lastName":"Doe"
},
{
"firstName":"Anna",
"lastName":"Smith"
},
{
"firstName":"Peter",
"lastName":"Jones"
}
]
}<?php }
?>
получаем:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
DEBUG/log_tag(533): Result: ГЇ»Вї"data":[
        {
        "firstName":"John",
        "lastName":"Doe"
        },
        {
        "firstName":"Anna",
        "lastName":"Smith"
        },
        {
        "firstName":"Peter",
        "lastName":"Jones"
        }
        ]
HTML5
1
2
3
4
5
6
7
8
9
0000   ef bb bf 22 64 61 74 61 22 3a 5b 0a 7b 0a 22 66  ..."data":[.{."f
0010   69 72 73 74 4e 61 6d 65 22 3a 22 4a 6f 68 6e 22  irstName":"John"
0020   2c 0a 22 6c 61 73 74 4e 61 6d 65 22 3a 22 44 6f  ,."lastName":"Do
0030   65 22 0a 7d 2c 0a 7b 0a 22 66 69 72 73 74 4e 61  e".},.{."firstNa
0040   6d 65 22 3a 22 41 6e 6e 61 22 2c 0a 22 6c 61 73  me":"Anna",."las
0050   74 4e 61 6d 65 22 3a 22 53 6d 69 74 68 22 0a 7d  tName":"Smith".}
0060   2c 0a 7b 0a 22 66 69 72 73 74 4e 61 6d 65 22 3a  ,.{."firstName":
0070   22 50 65 74 65 72 22 2c 0a 22 6c 61 73 74 4e 61  "Peter",."lastNa
0080   6d 65 22 3a 22 4a 6f 6e 65 73 22 0a 7d 0a 5d 20  me":"Jones".}.]
EDIsaev
4 / 4 / 0
Регистрация: 27.03.2012
Сообщений: 132
20.12.2013, 14:21  [ТС]     Получение ответа в формате json #11
dajver, да нет же) я бы не писал, если бы не проверил)
это от какой-то структуры данные лепятся вначале
вот из текстового редактора скрин
это в реализации что-то у вас думаю
Миниатюры
Получение ответа в формате json  
dajver
407 / 271 / 18
Регистрация: 18.09.2010
Сообщений: 1,106
20.12.2013, 14:30     Получение ответа в формате json #12
Цитата Сообщение от EDIsaev Посмотреть сообщение
dajver, да нет же) я бы не писал, если бы не проверил)
это от какой-то структуры данные лепятся вначале
вот из текстового редактора скрин
это в реализации что-то у вас думаю
Ладно, давай с начала, по моей ссылке получаешь данные? все ок? вот эта - http://myhomepage.hol.es/login.php
EDIsaev
4 / 4 / 0
Регистрация: 27.03.2012
Сообщений: 132
20.12.2013, 15:09  [ТС]     Получение ответа в формате json #13
да )
засада какая-то)
а у вас по моей значит тоже не получает корректно?
http://isaev.url.ph/getQuery1.php
а сам сервер что-то может дописывать?
dajver
407 / 271 / 18
Регистрация: 18.09.2010
Сообщений: 1,106
20.12.2013, 15:20     Получение ответа в формате json #14
Цитата Сообщение от EDIsaev Посмотреть сообщение
да )
засада какая-то)
а у вас по моей значит тоже не получает корректно?
http://isaev.url.ph/getQuery1.php
а сам сервер что-то может дописывать?
Может, сккорей всего так и есть, попробуй зарегистрировать хостинг бесплатный и чисто для теста закинь свой файл туда и попробуй приконектиться.
EDIsaev
4 / 4 / 0
Регистрация: 27.03.2012
Сообщений: 132
20.12.2013, 15:22  [ТС]     Получение ответа в формате json #15
так это и есть бесплатный
в компе файл 307 байт, а загружается на сервер становится 298
а как же тестить скрипт то, если он на каждом сервере будет по разному работать?
dajver
407 / 271 / 18
Регистрация: 18.09.2010
Сообщений: 1,106
20.12.2013, 15:26     Получение ответа в формате json #16
Цитата Сообщение от EDIsaev Посмотреть сообщение
так это и есть бесплатный
в компе файл 307 байт, а загружается на сервер становится 298
а как же тестить скрипт то, если он на каждом сервере будет по разному работать?
Это не от скрипта зависиит , а от настроек сервера. Скорей всего на этом сервере в настройках стоит какой то скрипт который до записывает к файлам что они на бесплатном серваке, или ещё что то подобное. Все равно советую сменить сервер, как по мне самое простое решение.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.12.2013, 15:30     Получение ответа в формате json
Еще ссылки по теме:

Android HttpUrlConnetcion получение ответа от сервера
Парсинг JSON ответа от сервера Android
Android Как отправлять get, post запрос а затем обработать в формате json?
SocketServer, Client. Получение ответа от сервера Android
Отправка и получение картинок JSON Android

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

Или воспользуйтесь поиском по форуму:
EDIsaev
4 / 4 / 0
Регистрация: 27.03.2012
Сообщений: 132
20.12.2013, 15:30  [ТС]     Получение ответа в формате json #17
а я думаю что, как какой пример не попробую, постоянно парсер падает(
эх
ладно, благодарю за помощь
Yandex
Объявления
20.12.2013, 15:30     Получение ответа в формате json
Ответ Создать тему
Опции темы

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