android中訪問 webView加載URL時的response數據

很少說直接上代碼:html

一、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()); } 二、MyWebViewClient 繼承WebViewClient,並重寫public boolean shouldOverrideUrlLoading(WebView view, String url)方法。簡單的說就是,經過HttpClient 來請求URL,獲取到相應的response,從response中就能夠獲得全部你想要的數據了;固然,要經過WebView.loadData()方法將response的entity加載到WebView中,這樣控件才能顯示web頁面:java

<!-- 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); }web

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開發者,代碼寫的醜的地方將就着看;另,歡迎扔磚…… ^_^app

相關文章
相關標籤/搜索