

<http://saki0n.blogspot.jp/2013/04/android-webview.html>

上記のサイトを参考にAndroidStudioにてWebViewを使いステータスコード（404や500など）を取得しようとしているのですが、多分`HttpStatus.SC_OK`がステータスコードの部分で、それと比較している`res.getStatusLine().getStatusCode()`の部分が200という数字だと思うのですが、これをtextViewに表示したりすることはできますか？

if文の中で  
`textView.setText(res.getStatusLine().getStatusCode());`とコードを書くとアプリが落ちてしまいます。

[code]

    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.HttpStatus;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.util.EntityUtils;
    import java.io.ByteArrayInputStream;
    import java.io.InputStream;
    
    public class MainActivity extends AppCompatActivity {
    
        private TextView textView;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            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);
                        // ここでステータスコードを取得できるよ!
                        if (HttpStatus.SC_OK == res.getStatusLine().getStatusCode()) {
                            HttpEntity entity = res.getEntity();
                            Header mimeHeader = entity.getContentType();
                            textView.setText(res.getStatusLine().getStatusCode());
                            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);
                }
            });
            myWebView.loadUrl("https://www.google.com/");
        }
    }
    
[/code]


CC BY-SA 3.0
2017-06-15T08:16:16.543
35604
2017-07-27T03:54:37.037
2017-07-27T03:54:37.037
21092
23801
question
android
AndroidStudio　TextViewに文字を表示


`res.getStatusLine().getStatusCode()`が返す値はint型です。  
`textView.setText()`にint型を渡すと、strings.xmlのnameと判定してしまうので、エラーになっていると思われます。

[code]

    int code = res.getStatusLine().getStatusCode();
    textView.setText("" + code);
    
[/code]

このように、intの値を空文字列と結合などして文字列に変換すれば、正しく表示されると思います。


CC BY-SA 3.0
2017-06-15T11:38:07.487
35609
2017-06-15T11:38:07.487
354
35604
answer