2010-03-26 46 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