Android:获取HTML从网页作为字符串HttpClient不工作

Android: get HTML from web page as String with HttpClient not working

本文关键字:字符串 HttpClient 工作 网页 获取 HTML Android      更新时间:2023-09-26

我正在编写一个使用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);
            }
        }
}