我正在编写一个使用 HttpClient 连接到网页的应用程序(目的是能够将网页的一些 HTML 复制到字符串中)。我尝试使用 HttpClient 连接来完成此任务。这是我使用的代码:
public void getText() {
final TextView contentView = (TextView) findViewById(R.id.textview);
String url = "http://www.anandtech.com";
/* An instance of this class will be registered as a JavaScript interface */
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(url);
ResponseHandler<String> handler = new BasicResponseHandler();
try {
String response = client.execute(get, handler);
contentView.setText(response);
} catch (Exception e) {
// TODO Auto-generated catch block
contentView.setText(e.getMessage());
}
}
我通过删除该块的每条语句,然后测试错误是否仍然发生,找到了错误的根源,发现错误源于client.execute(get, handler)。我有权在 AndroidManifest.xml 上使用互联网,并且我知道互联网可以在应用程序上正常工作,因为 WebView 可以正常加载。我怎样才能做到这一点?
另外,我尝试通过将 javascript 注入到 webview url 中来获取字符串,代码如下:
MyJavaScriptInterface.class
MyJavaScriptInterface 类
{
私有 TextView 内容视图;
public MyJavaScriptInterface(TextView aContentView)
{
contentView = aContentView;
}
}
MainActivity.java
@SuppressWarnings(“未使用”)
public void processContent(String aContent)
{
final String content = aContent;
contentView.post(new Runnable()
{
public void run()
{
contentView.setText(content);
}
});
}
}
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new MyJavaScriptInterface(contentView),"INTERFACE");
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
webView.loadUrl("javascript:window.INTERFACE.processContent(
document.getElementsByTagName('p')[0].innerHTML);");
}
});
webView.loadUrl("http://tabshowdown.blogspot.com");
该类和 processContent() 方法均在 Activity 的 void onCreate 方法 FIY 中定义。在这种情况下,问题是 javascript 没有启动 processContent() 方法,因为 a.如果我尝试初始化任何其他 javascript 命令,例如document.write(),webview 做出反应,所以 javascript 不是问题。如果我尝试从脚本上的其他位置启动 MyJavaScriptInterface 和 processContent() 方法,它就可以正常工作。因此,在我看来,JavaScript 在启动该方法时遇到了问题(即使其他用户报告该方法可以工作)。
有人可以帮助我让这两种方法发挥作用吗?
提前致谢