Android的WebView中使用OKHttp客户端?

问题描述 投票:0回答:1

我试图用OKHTTP的网页视图,因为我需要访问的响应头。问题是使用此代码的网页视图显示普通的HTML,而不是渲染它。

有什么想法吗?

class WebViewClientImpl(val webView: WebView): WebViewClient() {

    @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    override fun shouldInterceptRequest(view: WebView?, request: WebResourceRequest?): WebResourceResponse {
        return handleRequestViaOkHttp(url = request.url.toString())
    }

    @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
    private fun handleRequestViaOkHttp(url: String): WebResourceResponse {
        try {
            val okHttpClient = UnsafeOkHttpClient.getUnsafeOkHttpClient()
            val call = okHttpClient.newCall(Request.Builder().url(url).build())
            val response = call.execute()

            return  WebResourceResponse(
                    response.header("content-type", "text/html"),
                    response.header("content-encoding", "utf-8"),
                    response.body().byteStream()
            )
        } catch (e: Exception) {
            return  WebResourceResponse(null, null, null)
        }
    }

}
android webview okhttp
1个回答
1
投票

我有同样的问题,并通过不提供任何MIME类型和编码解决它。我无法设置为null,因为它是与它崩溃。

    WebViewClient client = new WebViewClient() {
        private OkHttpClient okHttp = new OkHttpClient.Builder().build();

        @Override
        public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
            Request okHttpRequest = new Request.Builder().url(url).build();
            try {
                Response response = okHttp.newCall(okHttpRequest).execute();
                return new WebResourceResponse("","",response.body().byteStream());
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    };
    webView.setWebViewClient(client);
© www.soinside.com 2019 - 2024. All rights reserved.