2011-09-07 4 views
2

실제로 내가 올바른 트위터와 얻기 위해 HTTP 청원을하게 코드의 JSON과 성문화 사용자로부터 약간의 트윗을HTTP를 만드는 방법 빠른 요청을 받으시겠습니까?

괜찮아, 잘 작동 (이 파일 .json를 얻을),하지만의 loooooooooooooot 소요 디버깅 나는 문제가 줄에 있음을 볼 수 있습니다. HttpResponse response = httpclient.execute(httpget);

트윗의 수가 3 개 또는 4 개의 트윗보다 많으면 초에 막히게됩니다. 20 개의 트윗을 요청하는 경우 10 ~ 15 초가 소요됩니다.

내가 사용하고있는 java/android http get 메소드의 문제점은 Firefox에서 url로 요청하면 매우 빠릅니다.

어떻게하면이 http를 빠르게 요청할 수 있습니까?

이 내 실제 느린 코드 :

public List<String> RetrieveTweets(String name, int num) //da todas las posiciones dado un email 
{ 
    // https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=charliesheen&count=2 
    List<String> tweetsList= new ArrayList<String>(); 
    String result = ""; 
    //http get 
    InputStream is=null; 
    try{ 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpGet httpget = new HttpGet("https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=" + name +"&count="+ num); 
      HttpResponse response = httpclient.execute(httpget); 
      HttpEntity entity = response.getEntity(); 
      is = entity.getContent(); 
    }catch(Exception e){ 
      Log.e("log_tag", "Error in http connection "+e.toString()); 
    } 
    //convert response to string 
    try{ 
      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(); 
      result=sb.toString(); 
    }catch(Exception e){ 
      Log.e("log_tag", "Error converting result "+e.toString()); 
    } 
    //parse json data 
    try{ 
      JSONArray jArray = new JSONArray(result); 
      for(int i=0;i<jArray.length();i++) 
      { 
        JSONObject json_data = jArray.getJSONObject(i); 
        tweetsList.add(json_data.getString("text")); //text es el nombre del campo del tweet 
      } 
    } 
    catch(JSONException e){ 
      Log.e("log_tag", "Error parsing data "+e.toString()); 
    } 
    return tweetsList; 
} 
+1

디버깅 HttpClient.execute()가 매우 느리다는 것을 알리는 블로그 항목을 발견했습니다 (http://codepainters.wordpress.com/2010/01/23/androids-https-implementation-slow-under-debugger/)./타이밍을 로그 아웃하면 더 빠릅니까? – flob

+1

try-stream-while-append-catch 난교 –

+0

대신에'result = EntityUtils.toString (entity);'를 사용하고 싶을 수도 있습니다. * 주석 블록에 * 코드 블럭을 표시하면 블록을 메소드로 추출하십시오. –

답변

0

당신이 HTTPS는 상태를 얻을 버전을 사용하는 데 필요한? HTTPS는 HTTP 때문에 두 가지의보다 느리게 될 것입니다 :

  • 가 연결 초기 cipter 알고리즘 + 핸드 쉐이크이 설정되면
  • 키 세션을 결정하는 악수 협상을 요구, 통신의 각 방법은 메시지의 암호화/암호 해독을 필요로 .

SSL이 필요하면 HttpClient를 인스턴스화하고 메서드에서 매번 인스턴스화하지 않을 수 있습니다. 다행히도 세션을 유지하고 매회마다 시작하면 비용이 많이 드는 핸드 셰이크를 피할 수 있습니다.

관련 문제