Поврежденный Json в Android Eclipse

1

im, имея странную проблему при получении json результатов с сервера. Я понятия не имею, в чем проблема. Дело в том, что мой результат String json поврежден, со странными символами.

Результат такой же (взятый из отладки eclipse)

Изображение:

Изображение 174551

Другая странная вещь, которая случается, заключается в том, что когда я изменяю URL-адрес службы на альтернативный, она работает, и данные не повреждаются. URL-адреса являются одинаковыми, но когда-то перенаправляют все на другое. URL-адрес всегда используется (например) http://www.hello.com. URL-адрес, который работает, - http://www.hello.com.uy (не могу указать точную ссылку по соображениям безопасности)

Второй перенаправляет все на первое, это единственное, что он делает.

Я попытался изменить кодировку на UTF-8 и все еще не работает, вот код (с одним из прокомментированных URL-адресов)

Я также пробовал использовать расширение Dev HTTP Client от chrome для проверки службы, и он отлично работает, никаких поврежденных данных. Кроме того, он отлично работает на iOS, поэтому я думаю, что это просто и проблема с Android и Java.

DevClient: Изображение 174551

try {
        JSONObject json = new JSONObject();
        HttpParams httpParams = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(httpParams, 10000);
        HttpConnectionParams.setSoTimeout(httpParams, 10000);
        HttpClient client = new DefaultHttpClient(httpParams);

        //String url = TAG_BASEURL_REST +"Sucursal";
        String url = "http://www.-------.com/rest/Sucursal";
        //String url = "http://www.--------.com.uy/rest/Sucursal";

        HttpGet request = new HttpGet(url);
        request.setHeader("Accept", "application/json");
        request.setHeader("Content-type", "application/json");

        HttpResponse response = client.execute(request);
        HttpEntity entity = response.getEntity();
        if (entity != null) {
            InputStream is = entity.getContent();
            BufferedReader reader = new BufferedReader(
                    new InputStreamReader(is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            String jsonRes = sb.toString();
            JSONArray jObj = new JSONArray(jsonRes);

            return jObj;
        }
    } catch (Throwable t) {
        Log.i("Error", "Request failed: " + t.toString(), t);
    }
    return null;
  • 0
    используйте JSON Lint для JSON.
  • 0
    распечатайте кодировку содержимого, может быть, ответ сжат или сжат
Показать ещё 1 комментарий
Теги:

1 ответ

1
Лучший ответ
InputStream is = entity.getContent();

// check if the response is gzipped
Header encoding = response.getFirstHeader("Content-Encoding");
if (encoding != null && encoding.getValue().equals("gzip")) {
    is = new GZIPInputStream(is);
}
  • 0
    Отлично!! Это было оно! Мне все еще интересно, почему один URL-адрес (.com) возвращает содержимое gzipped, а другой URL-адрес (.com.uy, который просто перенаправляет на исходный), возвращает его без кодировки. Мне также интересно, почему остальные сервисы не сжимаются, этот последний может быть чем-то связанным с сервером. PD извините за то, что не смог проголосовать за вас!
  • 0
    Нет проблем. Я также не слишком знаком с особенностями содержания gzipping, но я сталкивался с этой проблемой раньше, поэтому я точно знал, что происходит. Удачи!
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню