android中访问 webView加载URL时的response数据
16lz
2021-01-25
不多说直接上代码:
1、activity 的onCreate 方法,从布局中得到WebView引用,并设置相关参数
@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webView = (WebView) findViewById(R.id.web_view); webView.loadUrl("http://www.baidu.com"); webView.setWebViewClient(new MyWebViewClient()); webView.setWebChromeClient(new WebChromeClient());}
2、MyWebViewClient 继承WebViewClient,并重写public boolean shouldOverrideUrlLoading(WebView view, String url)方法。简单的说就是,通过HttpClient 来请求URL,获取到相应的response,从response中就可以得到所有你想要的数据了;当然,要通过WebView.loadData()方法将response的entity加载到WebView中,这样控件才能显示web页面:
private class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { Log.d("info", "===>>> shouldOverrideUrlLoading method is called!"); // TODO Auto-generated method stub URL local_url; URLConnection connection; try { local_url = new URL(url); connection = local_url.openConnection(); connection.setConnectTimeout(15000); connection.connect(); } catch (Exception e) {} final HttpGet httpGet = new HttpGet(url); Thread theard = new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub try { HttpResponse response; String htmlContent; HttpClient httpClient = new DefaultHttpClient(); response = httpClient.execute(httpGet); if (response.getStatusLine().getStatusCode() == 200) { Header[] headers = response.getAllHeaders(); for (Header header : headers) { String name = header.getName(); String value = header.getValue(); Log.d("info", "===>>> name:" + name); Log.d("info", "===>>> value:" + value); } HttpEntity entity = response.getEntity(); if (entity != null) { InputStream inputStream = entity.getContent(); htmlContent = convertToString(inputStream); Log.d("info", "===>>> htmlContent:" + htmlContent); webView.loadData(htmlContent, "text/html", "utf-8"); } } } catch (Exception e) { }; } }); theard.start();
// view.loadData(htmlContent, “text/html”, “utf-8”);
return true; // return super.shouldOverrideUrlLoading(view, url); } public String convertToString(InputStream inputStream) { StringBuffer string = new StringBuffer(); BufferedReader reader = new BufferedReader(new InputStreamReader( inputStream)); String line; try { while ((line = reader.readLine()) != null) { string.append(line + "\n"); } } catch (IOException e) { } return string.toString(); }}
注:我不是Java开发者,也不是Android开发者,代码写的丑的地方将就着看;另,欢迎扔砖…… _
更多相关文章
- 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
- Android(安卓)仿微信滑动删除
- Android(安卓)给图片、文字、控件、布局添加阴影效果(悬浮效果)
- Android之Fragment动态加载、Fragment与Activity传值通信
- [Android(安卓)Pro] ListView,GridView之LayoutAnimation特殊动
- SQLite的query方法,注意检查参数args中是否含null值
- Android与JS之间的互调
- 自定义时间控件
- Android国内一些比较知名的大牛