2013-03-28 81 views
0

正如標題所述,我在android中使用httpget,並且它的工作。但是,它返回的數據不完整。該調用返回大約99kb的json數據。但是,我的功能只產生38kb,json字符串不完整。Android獲取請求返回不完整的數據

我沒有得到任何錯誤,所以很難看到它發生的原因。

尺寸測量只是我在瀏覽器中調用並將輸出保存到一個文件中,並對函數的輸出進行相同操作。

下面是獲取URL代碼:

public String getpage2(){ 
    HttpClient client = new DefaultHttpClient(); 
    HttpGet request = new HttpGet(this.request); 
    HttpResponse response = null; 
    try { 
     response = client.execute(request); 
    } catch (ClientProtocolException e2) { 
     // TODO Auto-generated catch block 
     Log.e("getpage",e2.toString()); 
     e2.printStackTrace(); 
    } catch (IOException e2) { 
     // TODO Auto-generated catch block 
     Log.e("getpage",e2.toString()); 
     e2.printStackTrace(); 
    } 

    String html = ""; 
    try { 
     BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8")); 
     StringBuilder builder = new StringBuilder(); 
     for (String line = null; (line = reader.readLine()) != null ;) { 
      builder.append(line).append("\n"); 
     } 
     html = builder.toString(); 
     Log.d("nr",builder.capacity() + "/" + builder.length()); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     Log.e("getpage",e.toString()); 
     e.printStackTrace(); 
    }finally{ 

    } 
    return html; 
} 

任何幫助,將不勝感激。我不知所措......

+0

試圖實現從類似的問題的解決方案:HTTP:// stackoverflow.com/questions/9720381/http-get-request-is-missing-data – Roman

+0

感謝,似乎是在正確的軌道上。但是,我在實現它時遇到了麻煩,因爲它在字節數據中的讀取,我需要一個字符串。我該如何轉換? – Chris

回答

1

,你可以嘗試這種將數據完整副本,不要擔心錯過EOLS:

StringBuilder sb = new StringBuilder(); 
int len; 
char[] buf = new char[20]; 
while((len = reader.read(buf)) != -1) { 
    sb.append(buf, 0, len); 
} 
+0

這樣比較好。但仍然缺少一些它看起來像。首先,我認爲logcat無法顯示全部內容,因爲它看起來好像比我的表現還要多。使用你的代碼,我增加了一個計數器來查看有多少實際字符被讀取。它出現到100,885 ...現在瀏覽器的輸出輸出103,276個字符。更接近但仍不完整。是否有這個原因,你可以想到?整個行動相對較快,所以我很確定它不會超時。 – Chris

+0

你正在使用'BufferedReader',這個腳本並不重要,無論如何它都會緩存數據。您能否將原始數據保存到文件中,並將接收到的數據保存到另一個文件中併發布差異,這可能會有很大幫助? – lenik

+0

當然..這將是我的下一步,因爲我已經達到了我可以從logcat獲得的信息的極限。當我有機會嘗試時發現我發現的東西。 – Chris