android中访问 webView加载URL时的response数据

不多说直接上代码:

1、activity 的onCreate 方法,从布局中得到WebView引用,并设置相关参数 <!-- lang: java --> @Override protected 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页面:

<!-- lang: java -->
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开发者,代码写的丑的地方将就着看;另,欢迎扔砖…… ^_^

转载于:https://my.oschina.net/u/146011/blog/210110

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个例子: 1. 在res/layout文件夹创建一个名为fragment_webview.xml的布局文件,用于包含WebView。 ``` <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <WebView android:id="@+id/webview" android:layout_width="match_parent" android:layout_height="match_parent" /> <ProgressBar android:id="@+id/progressBar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" /> </LinearLayout> ``` 2. 在Fragment类,声明WebView和ProgressBar,并在onCreateView方法将它们实例化并添加到布局。 ``` public class WebViewFragment extends Fragment { private WebView mWebView; private ProgressBar mProgressBar; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_webview, container, false); mWebView = view.findViewById(R.id.webview); mProgressBar = view.findViewById(R.id.progressBar); mWebView.setWebViewClient(new MyWebViewClient()); mWebView.loadUrl("https://www.example.com"); return view; } private class MyWebViewClient extends WebViewClient { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { mProgressBar.setVisibility(View.VISIBLE); } @Override public void onPageFinished(WebView view, String url) { mProgressBar.setVisibility(View.GONE); } } } ``` 3. 在WebViewClient重写onPageStarted和onPageFinished方法,以显示和隐藏ProgressBar。 这样,当WebView开始加载页面,ProgressBar将显示在心,并在页面加载完成后自动消失。 注意:需要在AndroidManifest.xml文件添加Internet权限,以便WebView可以加载网页。 ``` <uses-permission android:name="android.permission.INTERNET" /> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值