您的位置:首页 > 移动开发

WebView中加载页面错误处理

2015-12-22 09:29 429 查看
     在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()方法中对应处理就可以。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: