2014-06-12 10 views
0

나는 서버에서 정보의 큰 덩어리를 읽어야하는 안드로이드 응용 프로그램을 만들고 있습니다.큰 응답 본문을 HttpClient로 읽음

서버가 정보를 JSONArray로 보내고 서버 측에서 문제가 없습니다.

그러나이 JSONArray를 수신하려고 할 때 문제가 발생하는 이유는 수신하기에 너무 큰 것 같습니다.

내가 같이 사용하여 서버에 HttpClient를 연결 :

HttpParams httpParams = new BasicHttpParams(); 
int timeoutConnection = 20000; 
HttpConnectionParams.setConnectionTimeout(httpParams, timeoutConnection); 
int timeoutSocket = 20000; 
HttpConnectionParams.setSoTimeout(httpParams, timeoutSocket); 

HttpClient client = new DefaultHttpClient(httpParams); 
HttpGet request = new HttpGet(); 
request.setURI(url); 

HttpResponse response = null; 
try { 
    response = client.execute(request); 
} catch (ClientProtocolException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

BufferedReader in = null; 
if (response != null) { 
    in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()), 100000); 
} 

return in; 

그리고 나는 단지 내의 readLine() 메소드를 BufferedReader로에 무엇이 읽으려고하지만 제가 돌아 가야하는 것은의 전체 만족하지 응답. 웹 브라우저에서 동일한 컨텐츠에 액세스하려고 시도했기 때문에이 사실을 알고 전체 컨텐츠를 리턴합니다.

서버의 응답은 (나도 몰라, 그것을 영향을 미칠 수있는)

을 나는 4킬로바이트을 읽을 수 그리고 난 무려 141킬로바이트을 읽을 필요가 한 줄에 (그래서 난 지금까지 끄기).

내 개인적인 추측은 내 코드 어딘가에 크기 제한이 있다는 것입니다.

BufferedReader in = getResponse(new URI(params[0])); 
// Read from the received buffer 
String s; 
StringBuilder sb = new StringBuilder(10000); 

if(in != null){ 
    while ((s = in.readLine()) != null){ 
     sb.append(s); 
    } 
} 

Log.d :

는 추가 나는이 같은 BufferedReader로 읽기 ("문제", sb.toString());

편집 : 응답은 다르지 않다, 그것은 항상 같은 길이

EDIT2 :()는 인쇄 길이 제한을 한 것으로는 Log.d 것을 보인다! 시작하는 데 문제가 없었습니다 ... 죄송합니다!

+0

서버에서 응답을 그냥 문자열 JSON 무엇입니까? –

+0

예, JSON으로 변환 된 일반 텍스트입니다. –

+0

GZIP 형식을 사용할 수없는 이유는 무엇입니까? – AAV

답변

1

사용 Gzip으로 압축 된 HTTP 요청

체크 아웃이 문서의 JSON : http://arnab.ch/blog/2012/09/android-how-to-send-gzipped-json-in-http-request/

+0

아티클에 설명 된대로 크기가 줄어들고 성능이 향상 될 수 있지만 문제가 어떻게 해결되는지 알 수 없습니다. –

+0

시간을 내서 죄송합니다. 인쇄 길이에 제한이있는 Log.d()였던 것 같습니다. 정보를 주셔서 감사합니다. 나중에 Gzip을 통해 성능을 향상시킬 것입니다. –

1

대신의 InputStream 그냥 직접 사용하여 문자열로 변환 읽는 EntityUtils.toString

예 :

try { 
    response = client.execute(request); 
    HttpEntity resEntityGet = responseGet.getEntity(); 

    final String result = EntityUtils.toString(resEntityGet); //result is your json response 

} catch (ClientProtocolException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
+0

슬프게도 도움이되지 못했습니다. –

+0

@DavidEkermann 그러면 서버의 응답이 문제가됩니다. –

+0

웹 브라우저로 서버 응답을 확인하고 전체 내용을 일반 텍스트로 반환합니다. 다음을 확인하십시오. http://213.103.209.154:1234/api/socialCard/fetch/my? token = t79pShThPlgc6P2qJ-3yT5lHpNbB31CUY9_pRel-d9Q –

관련 문제