android 下webview 如何判斷404?
問(wèn)題描述
我在使用
@Overridepublic void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { super.onReceivedError(view, request, error); PtrCLog.d('WebFragment', 'onReceivedError: ' + '');}
這個(gè)方法并沒(méi)有被回掉查看了一下說(shuō)是需要API23 才可以。。有大佬知道有別的方法獲取404嗎?
問(wèn)題解答
回答1:new WebViewClient() { @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {super.onReceivedError(view, errorCode, description, failingUrl);if (errorCode == 404) { doSomething();} } @Override public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {super.onReceivedError(view, request, error);if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) { int errorCode = error.getErrorCode(); if (errorCode == 404) {doSomething(); }} }};回答2:
在onPageStarted里邊跑一個(gè)AsyncTask,在AsyncTask里用OkHttpClient之類(lèi)的Http客戶(hù)端對(duì)需要訪問(wèn)的URL進(jìn)行一次請(qǐng)求,取得code
class WebViewStatusRequester extends AsyncTask<String, String, Integer> {@Overrideprotected void onPreExecute() { super.onPreExecute(); web.setVisibility(View.GONE);}@Overrideprotected void onPostExecute(Integer result) { super.onPostExecute(result); if(result == 1) {web.setVisibility(View.VISIBLE); } else if(result == 0) {showLoadFail(); }}@Overrideprotected Integer doInBackground(String... params) { String url = params[0]; if(url.substring(0, 4).equals('file') == false) {try { OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder().url(url).build(); Response response = client.newCall(request).execute(); if(response.isSuccessful()) {return 1; } else {Log.i('TAG', 'fail code:' + response.code());return 0; }} catch (IOException e) { e.printStackTrace();}return 0; } return 1;} }
在這里實(shí)際上是Webview和OkHttpClient進(jìn)行了加載,只是AsyncTask跑的時(shí)候把WebView隱藏起來(lái)了,確認(rèn)是200了就顯示,不是200就顯示加載失敗的頁(yè)面
相關(guān)文章:
1. 查詢(xún)mysql數(shù)據(jù)庫(kù)中指定表指定日期的數(shù)據(jù)?有詳細(xì)2. mysql - 怎么生成這個(gè)sql表?3. mysql儲(chǔ)存json錯(cuò)誤4. php - 公眾號(hào)文章底部的小程序二維碼如何統(tǒng)計(jì)?5. mysql - 表名稱(chēng)前綴到底有啥用?6. mysql - 數(shù)據(jù)庫(kù)表中,兩個(gè)表互為外鍵參考如何解決7. Navicat for mysql 中以json格式儲(chǔ)存的數(shù)據(jù)存在大量反斜杠,如何去除?8. 在mybatis使用mysql的ON DUPLICATE KEY UPDATE語(yǔ)法實(shí)現(xiàn)存在即更新應(yīng)該使用哪個(gè)標(biāo)簽?9. mysql - 數(shù)據(jù)庫(kù)建字段,默認(rèn)值空和empty string有什么區(qū)別 11010. sql語(yǔ)句 - 如何在mysql中批量添加用戶(hù)?
