android之webview使用-处理404等错误

public class WebView_404 extends Activity { 
    private final String HOMEPAGE = "http://www.abchina.com";//请求的网站的主页 
    private WebView web; 
    private Handler handler = new Handler() { 
            @Override 
            public void handleMessage(Message msg) { 
                    if(msg.what==404) {//主页不存在 
                            //载入本地assets文件夹下面的错误提示页面404.html 
                            web.loadUrl("file:///android_asset/404.html"); 
                    } else { 
                            web.loadUrl(HOMEPAGE); 
                    } 
            } 
    }; 
    
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
            super.onCreate(savedInstanceState); 
            setContentView(R.layout.main); 
            web = (WebView) findViewById(R.id.webview); 
            web.getSettings().setJavaScriptEnabled(true); 
            web.setWebViewClient(new WebViewClient() { 
                    @Override 
                    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
                            if(url.startsWith("http://") && getRespStatus(url)==404) { 
                                    view.stopLoading(); 
                                    //载入本地assets文件夹下面的错误提示页面404.html 
                                    view.loadUrl("file:///android_asset/404.html"); 
                            } else { 
                                    view.loadUrl(url); 
                            } 
                            return true; 
                    } 
            }); 
            new Thread(new Runnable() { 
                    @Override 
                    public void run() { 
                            Message msg = new Message(); 
                            //此处判断主页是否存在,因为主页是通过loadUrl加载的, 
                            //此时不会执行shouldOverrideUrlLoading进行页面是否存在的判断 
                            //进入主页后,点主页里面的链接,链接到其他页面就一定会执行shouldOverrideUrlLoading方法了 
                            if(getRespStatus(HOMEPAGE)==404) { 
                                    msg.what = 404; 
                            } 
                            handler.sendMessage(msg); 
                    } 
            }).start(); 
    } 
    
    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
            if(keyCode==KeyEvent.KEYCODE_BACK && web.canGoBack()) { 
                    web.goBack(); 
                    return false; 
            } 
            return super.onKeyDown(keyCode, event); 
    } 
    
    private int getRespStatus(String url) { 
            int status = -1; 
            try { 
                    HttpHead head = new HttpHead(url); 
                    HttpClient client = new DefaultHttpClient(); 
                    HttpResponse resp = client.execute(head); 
                    status = resp.getStatusLine().getStatusCode(); 
            } catch (IOException e) {} 
            return status; 
    } 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值