WebView中加载页面错误处理

     在Android项目中,我们通常会用WebView来加载网页面。使用方面,展示效果好,而且可以动态更新,用WebView来加载网页内容当然是我们开发APP的首页。不过,也有让人有点囧的时候。当我们的手机没有联网,或是服务端不小心瘫痪的时候,WebView展示的效果就有点不人性化哦。如图:

这张图还是显示得比较好看,这是我在没有网络的情况下在手机浏览器中打开百度的样子。如果是我们的应用在加载页面时,也出现类似这样的页面,把我们的网址暴露出来,有时就不太安全。那我们应该如何来处理呢?其实处理的方式有什么多种 方式,比如我们自定义一个View用来展示加载失败的样子,或都我们也可以直接写一个错误展示的HTML让WebView加载等等。我们进行重写的方法是WebViewClient的onReceivedError()方法。

方法一,在界面中自定义展示View:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:ldm="http://schemas.android.com/apk/res/com.ldm.learn"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <WebView
        android:id="@+id/test_wv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="15dp" />
    <TextView 
        android:id="@+id/error_show"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="15dp" 
        android:visibility="gone"
        android:text="升级维护中..."
        android:textSize="18sp"
        />

</RelativeLayout>

在Activity中处理方式:

public class MainActivity extends Activity {
private WebView test_wv;
private String downLoadUrl = "http://as.baidu.com/a/rank?cid=101&s=1&f=web_alad";
private TextView error_show;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.test_wv = (WebView) findViewById(R.id.test_wv);
this.error_show=(TextView) findViewById(R.id.error_show);
test_wv.loadUrl(downLoadUrl);
test_wv.setWebChromeClient(new WebChromeClient() {
@Override
public void onReceivedTitle(WebView view, String title) {
// TODO Auto-generated method stub
super.onReceivedTitle(view, title);
}
});
test_wv.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return super.shouldOverrideUrlLoading(view, url);
}
//当网页面加载失败时,会调用 这个方法,所以我们在这个方法中处理
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
// TODO Auto-generated method stub
test_wv.setVisibility(View.GONE);
error_show.setVisibility(View.VISIBLE);
}
});

}
}

结果展示如下:


方法2,自定义加载的Html:

在项目中添加一个自定义的html文件,如图:


在代码中:

test_wv.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return super.shouldOverrideUrlLoading(view, url);
}
//当网页面加载失败时,会调用 这个方法,所以我们在这个方法中处理
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
view.loadUrl("file:///android_asset/error.html");//添加显示本地文件
}
});

运行效果:


当然还有其它很多方式,只要在onReceivedError()方法中对应处理就可以。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值