Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android WebView中,是否可以在每个请求之前查看标题?_Android_Webview_Android Webview - Fatal编程技术网

在Android WebView中,是否可以在每个请求之前查看标题?

在Android WebView中,是否可以在每个请求之前查看标题?,android,webview,android-webview,Android,Webview,Android Webview,在安卓系统中,WebView(当页面加载时)支持用户导航和自动重定向- 我可以在每次请求之前查看标题吗 我只想查看标题并让请求继续 谢谢您可以创建一个WebViewClient来执行请求,该客户端允许您执行请求并解析标题响应,如Volley: private WebViewClient getWebViewClient() { return new WebViewClient() { @Override @TargetApi(Build.VERSION_C

在安卓系统中,WebView(当页面加载时)支持用户导航和自动重定向- 我可以在每次请求之前查看标题吗

我只想查看标题并让请求继续


谢谢

您可以创建一个WebViewClient来执行请求,该客户端允许您执行请求并解析标题响应,如Volley:

private WebViewClient getWebViewClient() {
    return new WebViewClient() {
        @Override
        @TargetApi(Build.VERSION_CODES.LOLLIPOP)
        public boolean shouldOverrideUrlLoading(final android.webkit.WebView view, WebResourceRequest request) {
            android.util.Log.d("Headers", "New request: " + request);
            if (request.getRequestHeaders() != null) {
                for (Map.Entry<java.lang.String, java.lang.String> entry : request.getRequestHeaders().entrySet()) {
                    android.util.Log.d("Headers", "Key = " + entry.getKey() + ", Value = " + entry.getValue());
                }
            }
            doVolleyRequest(view, request.getUrl().toString());
            return true;
        }

        @Override
        public boolean shouldOverrideUrlLoading(android.webkit.WebView view, String url) {
            android.util.Log.d("Headers", "New url: " + url);
            return false;
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            Log.d("onPageStarted", url);
        }
    };
}

private void doVolleyRequest(final WebView webView, String url) {
    StringRequest getRequest = new StringRequest(Request.Method.GET, url,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    // response
                    Log.d("Response", response);
                    webView.loadDataWithBaseURL(null, response, "text/html", "utf-8", null);
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    // error
                    Log.d("Error.Response", error.getLocalizedMessage());
                }
            }
    ) {
        @Override
        protected Response<String> parseNetworkResponse(NetworkResponse response) {
            Map<String, String> responseHeaders = response.headers;
            if (responseHeaders != null) {
                for (Map.Entry<java.lang.String, java.lang.String> entry : responseHeaders.entrySet()) {
                    android.util.Log.d("Headers", "Key = " + entry.getKey() + ", Value = " + entry.getValue());
                }
            }
            return super.parseNetworkResponse(response);
        }
    };
    RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
    queue.add(getRequest);
}
请记住,您需要将截击添加到gradle依赖项:

implementation 'com.android.volley:volley:1.1.1'
通过重写
shouldOverrideUrlLoading()
方法,它记录请求头并将响应html分配给webview,这样webview就不必自己加载url

implementation 'com.android.volley:volley:1.1.1'