¿Cómo crear XWalkWebResourceResponse?
Estoy buscando un método para crear XWalkWebResourceResponse . Mi caso sigue.
Estoy creando el cliente personalizado de XWalkResourceClient que interceptará todas las peticiones de la red. Toda la petición que debe ser interceptada vuelve como contenedor abstracto – AppWebResourceResponse .
- ¿Cómo obtener la dirección MAC de la interfaz de red WiFi?
- ¿Cómo recibir devoluciones de llamada en la pérdida de red para Android Nougat cuando la aplicación está cerrada?
- Android, http: ¿Cómo subir un archivo a un sitio alojado por un servidor compartido?
- Cómo tratar los problemas de la red
- La pila TCP XBox 360 no responde a sondas TCP Zero Window con una carga útil de 0 bytes
public final class CrossWebViewClient extends XWalkResourceClient { // other fields and constructor CrossWebResourceResponseMapper responseMapper; @Override public XWalkWebResourceResponse shouldInterceptLoadRequest(XWalkView view, XWalkWebResourceRequest request) { AppWebResourceRequest mappedRequest = requestMapper.toGenericRequest(request); AppWebResourceResponse interceptedResponse = requestInterceptor.shouldInterceptRequest(mappedRequest); if (interceptedResponse == null) { return super.shouldInterceptLoadRequest(view, request); } return responseMapper.toTargetResponse(interceptedResponse); } }
El último paso. Debo adaptar AppWebResourceResponse a XWalkWebResourceResponse y aquí es donde tengo un problema.
public class CrossWebResourceResponseMapper implements AppWebResourceResponse.Mapper<XWalkWebResourceResponse> { @Override public XWalkWebResourceResponse toTargetResponse(final AppWebResourceResponse appResponse) { String mimeType = appResponse.getMimeType(); String encoding = appResponse.getEncoding(); int statusCode = appResponse.getStatusCode(); String reasonPhrase = appResponse.getReasonPhrase(); Map<String, String> headers = appResponse.getResponseHeaders(); InputStream data = appResponse.getData(); // ??? how to create response object? XWalkWebResourceResponse response; response.setMimeType(mimeType); response.setEncoding(encoding); response.setStatusCodeAndReasonPhrase(statusCode, reasonPhrase); response.setResponseHeaders(headers); response.setData(data); return response; } }
De acuerdo con la API tiene constructor público new XWalkWebResourceResponse(bridge)
que consume objeto de puente, aunque no he encontrado una forma de recuperar puente particular (org.xwalk.core.internal.XWalkWebResourceResponseBridge).
¿Dónde puedo recuperar XWalkWebResourceResponseBridge ?
Gracias por adelantado.
Actualización el 25/04/2016:
De acuerdo con Xiaofeng es posible crear objeto XWalkWebResourceResponse utilizando objeto XWalkResourceClient .
public class XWalkWebResourceResponseMapper { public XWalkWebResourceResponse toTargetResponse(XWalkResourceClient client, AppWebResourceResponse appResponse) { String mimeType = appResponse.getMimeType(); String encoding = appResponse.getEncoding(); int statusCode = appResponse.getStatusCode(); String reasonPhrase = appResponse.getReasonPhrase(); Map<String, String> headers = appResponse.getResponseHeaders(); InputStream data = appResponse.getData(); return client.createXWalkWebResourceResponse(mimeType, encoding, data, statusCode, reasonPhrase, headers); } } public final class CrossWebViewClient extends XWalkResourceClient { @Override public XWalkWebResourceResponse shouldInterceptLoadRequest(XWalkView view, XWalkWebResourceRequest request) { AppWebResourceRequest mappedRequest = requestMapper.toGenericRequest(request); AppWebResourceResponse interceptedResponse = requestInterceptor.shouldInterceptRequest(mappedRequest); if (interceptedResponse == null) { return super.shouldInterceptLoadRequest(view, request); } return responseMapper.toTargetResponse(this, interceptedResponse); } }
- ¿Por qué la recepción de multidifusión no funciona en algunos dispositivos Android?
- Conecte Eclipse al emulador de Android en una máquina diferente
- Cómo administrar la conexión ssl cuando el servicio de red cambia
- Android: Restablecer programaticamente la señal de red de radio del teléfono
- Conecte el androide al LAN local vía el teléfono (sobre wifi O vía la conexión del USB)
- Cómo obtener la dirección IP y los nombres de todos los dispositivos en la red local en Android
- Envío de SQLite db al servicio web
- Android, NetworkInfo.getTypeName (), NullpointerException
Gracias usando Crosswalk.
Para crear XWalkWebResourceResponse, debe utilizar createXWalkWebResourceResponse en XWalkResourceClient, por favor vea aquí . Debido a un problema de bloque interno, no puede utilizar constructor general para crear.
Aquí hay un ejemplo sobre cómo usarlo: https://github.com/crosswalk-project/crosswalk/pull/3454/files
class MyResourceClient extends XWalkResourceClientInternal { MyResourceClient(XWalkViewInternal view) { super(view); } @Override XWalkWebResourceResponseInternal shouldInterceptLoadRequest(XWalkViewInternal view, XWalkWebResourceRequestInternal request) { // Handle it here. // Use createXWalkWebResourceResponse instead of "new XWalkWebResourceResponse" // to create the response. // Similar with before, there are two function to use: // 1) createXWalkWebResourceResponse(String mimeType, String encoding, InputStream data) // 2) createXWalkWebResourceResponse(String mimeType, String encoding, InputStream data, // int statusCode, String reasonPhrase, Map<String, String> responseHeaders) ... }
}
También puede ver esto en el documento de la API de XWalkView más adelante.
- Android: ¿Qué precaución debo tener al usar la propiedad setTag () de View?
- Solicitud de llamadaPermisiones dos veces en llamadas de kernel personalizadas onRequestPermissionsResult antes de la respuesta del usuario