2014-01-23 4 views
1

서버에서 json 결과를 수신 할 때 이상한 문제가 발생합니다. 나는 그 문제가 뭔지 전혀 모른다. 문제는 내 String json 결과가 이상한 기호로 손상되었음을 나타냅니다.Android에서 손상된 Json

결과는 (이클립스 디버그에서 촬영)이 같다

이미지 :

입니다 일어나는 또 다른 이상한 것은 그 내가 하나의 대안으로 서비스의 URL을 변경할 때, 작동하고 데이터가 손상되지 않습니다. URL은 동일하지만 한 번만 다른 URL로 리디렉션됩니다. URL은 사용이 항상 작동하는 URL이 유일하게이하지 (보안상의 이유로 정확한 링크를 게시하지 못할)

두 번째는 첫 번째로 모든 리디렉션 http://www.hello.com.uy 입니다 http://www.hello.com (예)입니다. 여기에 나는 또한 확인하기 위해 크롬에서 데브 HTTP 클라이언트 확장을 사용하여 시도 (URL 중 하나가 주석과) 코드

이며,

나는 UTF-8 인코딩을 변경 시도하고 그것은 여전히 ​​작동하지 않습니다 서비스 및 그것은 잘 작동, 손상된 데이터가 없습니다. 또한, 그것은 iOS에서 완벽하게 작동하기 때문에 나는 그것의 just and android/java 문제를 생각합니다.

DevClient : JSON에 대한 enter image description here

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 보풀. –

+0

인쇄 콘텐츠 어쩌면 응답은 gzip 또는 deflated – Selvin

+0

실제로 콘텐츠 인코딩은 gzip, 당신은 또한 dev 클라이언트의 이미지에서 볼 수 있습니다. 여기 엔 entity.getContentEnconding() .ToString()이 "Content-Encoding : gzip"을 반환했습니다. – klifa

답변

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

우수 !! 이것은 그 것이었다! Im은 여전히 ​​하나의 URL (.com)이 gzipped 된 내용과 다른 URL (단순히 원래 URL로 리디렉션되는 .com.uy)을 반환하면 인코딩하지 않고 반환하게됩니다. 또 다른 서비스가 gzip으로 압축되지 않은 이유는 궁금합니다.이 마지막 서비스는 서버와 관련이 있습니다. P.D. 당신을 투표 할 수 없다는 것에 유감스럽게 생각합니다! – klifa

+0

문제 없습니다. 또한 gzipping의 내용에 너무 익숙하지 않지만 이전에이 문제를 겪었 기 때문에 어떤 일이 발생했는지 정확히 알았습니다. 행운을 빕니다! –

+0

또한 API 관련 자료에 대해 Volley (https://developers.google.com/events/io/sessions/325304728)와 같은 것을 사용하여 이러한 문제를 처리 할 수 ​​있다고 생각합니다. –