studio shouldoverrideurlloading developer android webview android-webview webviewclient

shouldoverrideurlloading - webview android studio 2018



Fallo del sistema cuando se reemplaza shouldInterceptRequest en WebViewClient (1)

Gol:

Anule todas las solicitudes realizadas por una vista web y realice la solicitud yo mismo (eventualmente configure un proxy).

Código:

@Override public WebResourceResponse shouldInterceptRequest(WebView view, String url) { if (url == null || url.trim().equals("")) return null; final DefaultHttpClient httpClient = new DefaultHttpClient(); httpClient.getConnectionManager().closeExpiredConnections(); final HttpUriRequest httpRequest = new HttpGet(url); try { final HttpResponse response = httpClient.execute(httpRequest); final Header[] headers = response.getHeaders(CONTENT_TYPE); String mimeType = ""; String encoding = ""; if (headers != null && headers.length > 0) { final String type = headers[0].getValue(); final int semicolonIndex = type.indexOf('';''); if (semicolonIndex != -1) { mimeType = type.substring(0, semicolonIndex).trim(); encoding = type.substring(semicolonIndex + 1).trim(); final int equalsIndex = encoding.indexOf(''=''); if (equalsIndex != -1) encoding = encoding.substring(equalsIndex + 1).trim(); } else mimeType = type; } return new WebResourceResponse(mimeType, encoding, response.getEntity().getContent()); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } finally { httpClient.getConnectionManager().closeExpiredConnections(); } return null; }

Todas las solicitudes parecen ir bien, pero eventualmente obtengo un seguimiento de pila con uno de los dos problemas siguientes:

3 15:07:28.650 E/InputDispatcher( 3981): channel ''40d76268 com.secure.browser/com.secure.browser.SecureBrowserActivity (server)'' ~ Consumer closed input channel or an error occurred. events=0x8 01-03 15:07:28.650 E/InputDispatcher( 3981): channel ''40d76268 com.secure.browser/com.secure.browser.SecureBrowserActivity (server)'' ~ Channel is unrecoverably broken and will be disposed!

que es aparentemente indicativo de que el sistema operativo se está quedando sin descriptores de archivos (fid)

o

01-03 15:29:36.810 I/DEBUG ( 5798): 5903cd34 ac81c0b7 /system/lib/libdvm.so 01-03 15:29:38.380 I/DEBUG ( 5798): debuggerd committing suicide to free the zombie! 01-03 15:29:38.380 I/BootReceiver( 3981): Copying /data/tombstones/tombstone_07 to DropBox

(SYSTEM_TOMBSTONE)

Lo que significa que creo que significa que el sistema operativo se está ejecutando en problemas de bajo nivel.

Estoy usando 3.0 + por lo que la función debe ser compatible.

Esto falla principalmente cuando enciendo javascript, o después de navegar un rato sin javascript.


El método está en desuso. Intenta con otra firma del mismo método.