Android:获取HTML从网页作为字符串HttpClient不工作
Android: get HTML from web page as String with HttpClient not working
我正在编写一个使用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());
}
}
我通过删除该块的每个语句来找到错误的来源,然后测试错误是否仍然发生,并发现错误源于客户端。(获取、处理程序)执行。我有权在AndroidManifest.xml上使用互联网,我知道互联网无论如何都能在应用程序上工作,因为WebView可以加载得很好。我该怎么做呢?
此外,我试图通过注入javascript到webview url来获得字符串,使用以下代码:
MyJavaScriptInterface.class类MyJavaScriptInterface{
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有麻烦启动方法(即使其他用户报告这个方法工作)。
有人能帮我让这两种方法中的任何一种工作吗?提前感谢
应该可以:
public class MainActivity extends Activity{
private TextView contentView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(your layout);
contentView = (TextView) findViewById(R.id.textview);
DownloadTask task = new DownloadTask();
task.execute(url);
}
private class DownloadTask extends AsyncTask<String, Void, String>{
@Override
protected String doInBackground(String... urls) {
HttpResponse response = null;
HttpGet httpGet = null;
HttpClient mHttpClient = null;
String s = "";
try {
if(mHttpClient == null){
mHttpClient = new DefaultHttpClient();
}
httpGet = new HttpGet(urls[0]);
response = mHttpClient.execute(httpGet);
s = EntityUtils.toString(response.getEntity(), "UTF-8");
} catch (IOException e) {
e.printStackTrace();
}
return s;
}
@Override
protected void onPostExecute(String result){
contentView.setText(result);
}
}
}
相关文章:
- 如何在JavaScript中将字符串转换为函数引用
- jQuery中是否内置了任何字符串格式化函数
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- ng打开空字符串
- 正则表达式在字符串中找到base64
- 如何将字符串值从php页面发送到java脚本页面
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 字符串在将其传递给另一个活动Android JavaScript时读取Null
- 对id以某个字符串开头的元素进行计数
- Javascript逻辑运算符和字符串/数字
- 反向字符串比较
- 如何有效地将游戏数据存储在URL查询字符串中
- 可变大小的JavaScript字符串如何成为基元类型
- 将DOM节点值与字符串Javascript进行比较
- 如何在 Javascript 中将变量的值从字符串转换为整数
- 本地存储中的字符串到字节数组转换
- JavaScript按钮/输入/函数,字符串反转
- 从查询字符串参数推断出正确的数据类型
- 高亮显示与数组字符串一起使用时文本插件中断
- Android:获取HTML从网页作为字符串HttpClient不工作