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

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

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

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

18.12.2013, 13:04. Просмотров 2866. Ответов 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 (Программирование Android):

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

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

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

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

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

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

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

Получение JSON с сервера - Программирование Android
Есть класс который принимает строку URL и возвращает JSONObject public class Json { public static JSONObject getJson(String...

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

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

Получение даты и времени в формате текущей локализации - Программирование Android
SimpleDateFormat LocaleDateFormat = new SimpleDateFormat(); В этом случае с русской локалью дата и время отображается так: 12.03.13...


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

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

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