1

我正在编写一个使用 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 无法启动该方法(即使其他用户报告此方法有效)。

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

4

1 回答 1

1

这应该有效:

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);

            }
        }
}
于 2013-06-08T00:38:25.660 回答