我正在编写一个使用 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 { private TextView contentView;
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 无法启动该方法(即使其他用户报告此方法有效)。
有人可以帮助我使这些方法中的任何一种起作用吗?提前致谢