WebView学习的总结————慕课网

1.简介


通过一个链接去加载网页的时候我们通常会使用一个WebView的控件,这里相信都是知道的!!

2.简单使用

相信webView.loadUrl();大家都很属性,但是只用此操作,会使得你的应用是打开系统的浏览器去打开url的,这时候我们怎么处理

webView.loadUrl("http://www.downxia.com/downinfo/70636.html#softdown");
webView.setWebViewClient(new WebViewClient(){
			//让他在自己的activity中打开网页,
			@Override
			public boolean shouldOverrideUrlLoading(WebView view, String url) {
				view.loadUrl(url);
				return super.shouldOverrideUrlLoading(view, url);
			}

定义一个progressDialog来实现网页未加在出来时中间显示加载进度和温馨提示
webView.setWebViewClient(new MyWebViewClient())
private class MyWebViewClient extends WebViewClient{
@Override
public void onPageStarted(WebView view, String url,Bitmap favicon) {//网页页面开始加载的时候
if (progressDialog == null) {
progressDialog=new ProgressDialog(MainActivity.this);
progressDialog.setMessage("数据加载中,请稍后。。。");
progressDialog.show();
webView.setEnabled(false);// 当加载网页的时候将网页进行隐藏
}
super.onPageStarted(view, url,favicon);
}
@Override
public void onPageFinished(WebView view, String url) {//网页加载结束的时候
//super.onPageFinished(view, url);
if (progressDialog != null && progressDialog.isShowing()) {
progressDialog.dismiss();
progressDialog = null;
webView.setEnabled(true);
}
}
@Override
public boolean shouldOverrideUrlLoading(WebView view ,String url){ //网页加载时的连接的网址
view.loadUrl(url);
return false;
} 
}



网页刷新 webView.reload();

3.下载文件

	webView.setDownloadListener(new DownloadListener() {
	@Override
		public void onDownloadStart(String url, String userAgent,String contentDisposition, String mimetype, long contentLength) {
				// 开启一个线程去下载对象
				System.out.println("<<<<<<<<<<<<<<<<"+url);
				if(url.endsWith(".apk")){
					//自己去下载
					new HttpThread(url).start(); 
					//通过系统下载
//					Uri uri =Uri.parse(url);
//					Intent intent = new Intent(Intent.ACTION_VIEW,uri);
//					startActivity(intent);
					
				}
			}
		});

代码的注释很清楚就不说了


4.错误处理(网络404等)

webView.setWebViewClient(new WebViewClient(){
			
			//当没有网络,或者是连接错误的时候使用
			@Override
			public void onReceivedError(WebView view, int errorCode,
					String description, String failingUrl) {
				super.onReceivedError(view, errorCode, description, failingUrl);
				view.loadUrl("file:///android_asset/error.html");//引人一个asset下的一个加载错误页面
				//也可是使用自定义的控件去显示
                               //webView.setVisibility(View.GONE);
				//提示控件.setVisibility(View.VISIBLE);
			}
		});




5.同步cookie

用户登录之后,我们通常在客户端报存用户的信息,我们可以把登录的cookie信息传给服务器,让服务器做一个表示,避免重新登录。那我们通过客户端和webView的cookie同步,

并在activity中设置:

6.WebView和js调用的混淆问题


我们在打包的时候混淆代码,打包完成之后会导致了js的方法调用失败。我们 只要在proguard.cfg文件夹中添加

-keep class com.example.webview.WebHost {  
    public <methods>;  
}  

7.在activity中使用,回退网页界面使用

//覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
        	webView.goBack(); //goBack()表示返回WebView的上一页面
            return true;
        }
        finish();//结束退出程序
        return false;
    }

//其实也就是改写了 onBackPressed()方法

8.忽略证书

	webView.setWebViewClient(new WebViewClient() {
			 public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error){
//				handler.cancel(); // Android默认的处理方式
				handler.proceed();  // 接受所有网站的证书
				//handleMessage(Message msg); // 进行其他处理
			 }
		});


demo的链接 http://www.oschina.net/code/snippet_2702417_55745

相关博文链接:

http://m.oschina.net/blog/673030

http://m.oschina.net/blog/673031

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值