2010-03-26 38 views
3

我使用DefaultHttpClient類將一些數據發佈到服務器,並在響應流中獲取HTML文件。我的流保存爲一個字符串,並把它傳遞到其中包含一個web視圖來呈現在屏幕上該HTML另一個活動:webView內部的HTML

response = httpClient.execute(get); 
InputStream is = response.getEntity().getContent(); 
BufferedReader br = new BufferedReader(new InputStreamReader(is,"utf-8")); 
StringBuffer sb = new StringBuffer(); 
String line; 

while((line=br.readLine())!=null){ 
    sb.append(line); 
    sb.append("\n"); 
} 

is.close(); 

Intent intent = new Intent(this,Trial.class); 
intent.putExtra("trial",sb.toString()); 
startActivity(intent); 

Log.i("SB",sb.toString()); 

在第二個活動,加載web視圖的代碼讀取:

WebView browser = ((WebView)findViewById(R.id.trial_web)); 
browser.getSettings().setJavaScriptEnabled(true); 
browser.loadData(html,"text/html", "utf-8"); 

當我運行此代碼時,WebView無法正確呈現HTML內容。它實際上在屏幕上以URL編碼格式顯示HTML字符串。有趣的是,如果我將Loggers輸出複製到HTML文件,然後在我的WebView中加載這個HTML(使用webview.loadurl(file:///assets/xyz.html)),一切正常。

我懷疑字符編碼有些問題。

這裏怎麼回事?請幫忙。

謝謝。

回答

1

嘗試使用BasicResponseHandler而不是自己將其全部轉換爲字符串。一個例子見here。我很懷疑這會有所幫助,但它會簡化你的代碼,並讓你擺脫效率低下的StringBuffer

此外,您可能會嘗試切換到loadDataWithBaseURL(),因爲loadData()的結果很差。上述例子也顯示了這一點。

+0

再次感謝馬克! 這是loadDataWithBaseURL()第二次完成其重載的對應部分。首先,它是對內聯CSS樣式的再現,現在是這樣。爲什麼這個特質,任何想法? 另外,感謝提醒我BasicResponseHandler,我幾乎已經忘記了它。 乾杯! – Samuh 2010-03-26 15:10:57

+1

「爲什麼這個特質,任何想法?」 - 每次我想我有一個模式,其他的東西都會打破它,所以現在我只是直接發誓loadData()。 – CommonsWare 2010-03-26 19:05:45