Android:从网页获取HTML作为String,HttpClient无法正常工作

我正在编写一个使用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 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来获取String,其代码如下:

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启动方法有困难(即使其他用户报告此方法工作)。

有人可以帮助我让这些方法中的任何一种起作用吗? 提前致谢

这应该工作:

 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{ @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); } } }