Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/17: Рейтинг темы: голосов - 17, средняя оценка - 4.71
EDIsaev
4 / 4 / 2
Регистрация: 27.03.2012
Сообщений: 136
#1

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

18.12.2013, 13:04. Просмотров 3015. Ответов 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: колдовать пытался на основе этого примера: ссылка

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.12.2013, 13:04
Ответы с готовыми решениями:

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

Как вывести метки на карте в цикле из json ответа
Здравствуйте! Имеется таблица с координатами langitude и latitude в базе MySQL....

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

Post запрос к серверу и получение ответа
Здравствуйте, мне нужно, чтобы программа отправляла запрос серверу, получала...

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

16
Gabberr
103 / 103 / 19
Регистрация: 13.10.2009
Сообщений: 404
19.12.2013, 10:02 #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());
0
ASDFD12
57 / 57 / 14
Регистрация: 15.09.2012
Сообщений: 542
19.12.2013, 12:30 #3
Поставь библиотеку jsoup. Все легко распарсиш.
0
EDIsaev
4 / 4 / 2
Регистрация: 27.03.2012
Сообщений: 136
19.12.2013, 13:26  [ТС] #4
Цитата Сообщение от ASDFD12 Посмотреть сообщение
Поставь библиотеку jsoup. Все легко распарсиш.
она вообще для json предназначена? что-то ни примеров на сайте ни даже упоминания
только html и xml расписаны
да и есть же стандартные методы, зачем велосипеды то цеплять?
0
dajver
410 / 274 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
20.12.2013, 02:25 #5
http://dajver.blogspot.com/2013/02/json.html
1
EDIsaev
4 / 4 / 2
Регистрация: 27.03.2012
Сообщений: 136
20.12.2013, 13:40  [ТС] #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)
проект в аттаче, на сервере файл оставил для теста
0
Вложения
Тип файла: 7z GetJsonTest.7z (24.2 Кб, 8 просмотров)
dajver
410 / 274 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
20.12.2013, 13:48 #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, на свои параметры. тогда и ошибок не будет.
0
EDIsaev
4 / 4 / 2
Регистрация: 27.03.2012
Сообщений: 136
20.12.2013, 14:02  [ТС] #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"
        }
        ]
0
dajver
410 / 274 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
20.12.2013, 14:08 #9
Скорей всего это дописывает не сервак, а текстовый редактор в котором вы сохранили файл
0
EDIsaev
4 / 4 / 2
Регистрация: 27.03.2012
Сообщений: 136
20.12.2013, 14:12  [ТС] #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".}.]
0
EDIsaev
4 / 4 / 2
Регистрация: 27.03.2012
Сообщений: 136
20.12.2013, 14:21  [ТС] #11
dajver, да нет же) я бы не писал, если бы не проверил)
это от какой-то структуры данные лепятся вначале
вот из текстового редактора скрин
это в реализации что-то у вас думаю
0
Миниатюры
Получение ответа в формате json  
dajver
410 / 274 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
20.12.2013, 14:30 #12
Цитата Сообщение от EDIsaev Посмотреть сообщение
dajver, да нет же) я бы не писал, если бы не проверил)
это от какой-то структуры данные лепятся вначале
вот из текстового редактора скрин
это в реализации что-то у вас думаю
Ладно, давай с начала, по моей ссылке получаешь данные? все ок? вот эта - http://myhomepage.hol.es/login.php
0
EDIsaev
4 / 4 / 2
Регистрация: 27.03.2012
Сообщений: 136
20.12.2013, 15:09  [ТС] #13
да )
засада какая-то)
а у вас по моей значит тоже не получает корректно?
http://isaev.url.ph/getQuery1.php
а сам сервер что-то может дописывать?
0
dajver
410 / 274 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
20.12.2013, 15:20 #14
Цитата Сообщение от EDIsaev Посмотреть сообщение
да )
засада какая-то)
а у вас по моей значит тоже не получает корректно?
http://isaev.url.ph/getQuery1.php
а сам сервер что-то может дописывать?
Может, сккорей всего так и есть, попробуй зарегистрировать хостинг бесплатный и чисто для теста закинь свой файл туда и попробуй приконектиться.
0
EDIsaev
4 / 4 / 2
Регистрация: 27.03.2012
Сообщений: 136
20.12.2013, 15:22  [ТС] #15
так это и есть бесплатный
в компе файл 307 байт, а загружается на сервер становится 298
а как же тестить скрипт то, если он на каждом сервере будет по разному работать?
0
dajver
410 / 274 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
20.12.2013, 15:26 #16
Цитата Сообщение от EDIsaev Посмотреть сообщение
так это и есть бесплатный
в компе файл 307 байт, а загружается на сервер становится 298
а как же тестить скрипт то, если он на каждом сервере будет по разному работать?
Это не от скрипта зависиит , а от настроек сервера. Скорей всего на этом сервере в настройках стоит какой то скрипт который до записывает к файлам что они на бесплатном серваке, или ещё что то подобное. Все равно советую сменить сервер, как по мне самое простое решение.
0
EDIsaev
4 / 4 / 2
Регистрация: 27.03.2012
Сообщений: 136
20.12.2013, 15:30  [ТС] #17
а я думаю что, как какой пример не попробую, постоянно парсер падает(
эх
ладно, благодарю за помощь
0
20.12.2013, 15:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.12.2013, 15:30

Отправка запроса на сервер - получение ответа в xml и обработка
Всем добрый день. Искал по всем форумам и всем блогам, но нужного ответа не...

Как отправлять get, post запрос а затем обработать в формате json?
Как на android srudio отправить post, ger запрос, затем обработать ответ в...

Получение JSON с сервера
Есть класс который принимает строку URL и возвращает JSONObject public class...


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

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

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