WebViewにて404が取得できない。 webviewにて404コードを取得したいのですが取得しようとするとアプリが落ちてしまいます。 状況、目的 ・ソースコードのmyWebView.loadUrl()の値をわざと存在しないURLに変えて 54行目付近のif分の引数を「HttpStatus.SC_OK == res.getStatusLine().getStatusCode()||HttpStatus.SC_NOT_FOUND == res.getStatusLine().getStatusCode()||HttpStatus.SC_OK != res.getStatusLine().getStatusCode()」にしたらコード200の時、または404の時、または200以外の時になると思うのですが404が取得できない。 困っているので教えて下さい。お願い致します。 ーー public class MainActivity extends AppCompatActivity { private TextView textView; SharedPreferences sharedPref; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sharedPref = PreferenceManager.getDefaultSharedPreferences(this); WebView myWebView = (WebView) findViewById(R.id.webView); textView = (TextView) findViewById(R.id.textView); //myWebView.setWebViewClient(new WebViewClient()); myWebView.setWebViewClient(new WebViewClient() { @TargetApi(Build.VERSION_CODES.HONEYCOMB) @Override public WebResourceResponse shouldInterceptRequest(WebView view, String url) { if (!url.matches("https?://[\\w\\.\\-]+(/.*)?")) { return super.shouldInterceptRequest(view, url); } HttpGet req = new HttpGet(url); DefaultHttpClient client = new DefaultHttpClient(); String mimeType = null, encoding = null; byte[] data = null; try { HttpResponse res = client.execute(req); // 質問者の目的:↓ここのコメントアウトを外し下のmyWebView.loadUrlを存在しないurlに変えて404を取得したい if (HttpStatus.SC_OK == res.getStatusLine().getStatusCode()/*||HttpStatus.SC_NOT_FOUND == res.getStatusLine().getStatusCode()||HttpStatus.SC_OK != res.getStatusLine().getStatusCode()*/) { HttpEntity entity = res.getEntity(); Header mimeHeader = entity.getContentType(); SharedPreferences.Editor editor = sharedPref.edit(); editor.putString( "data1", String.valueOf(res.getStatusLine().getStatusCode())); editor.commit(); if (null != mimeHeader) mimeType = mimeHeader.getValue(); Header encodingHeader = entity.getContentEncoding(); if (null != encodingHeader) encoding = encodingHeader.getValue(); data = EntityUtils.toByteArray(entity); } } catch (Exception e) { String msg = e.getMessage(); Log.e(this.getClass().getSimpleName(), (null != msg) ? msg : ""); } finally { req.abort(); client.getConnectionManager().shutdown(); } InputStream stream = new ByteArrayInputStream(data); return new WebResourceResponse(mimeType, encoding, stream); } @Override public void onReceivedError(WebView view, int errorCode, String descriptin, String url) { Toast.makeText(MainActivity.this, "通信エラー", Toast.LENGTH_LONG).show(); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse){ errorResponse.getStatusCode(); } }); myWebView.clearCache(true); /*404を取得するため存在しないurlを採用。元のurl:https://www.googl.com/*/ myWebView.loadUrl("https://www.googl.com/"); textView.setText(String.valueOf(sharedPref.getString("data1", ""))); } } ーー ーー
↧