android之webview使用-處理404等錯誤

jopen 11年前發布 | 84K 次閱讀 Android Android開發 移動開發

    public class WebView_404 extends Activity {
private final String HOMEPAGE = "
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;   
    }   
}  </pre><br />
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!