Я ищу способ создания XWalkWebResourceResponse. Мое дело следующее.Как создать XWalkWebResourceResponse?
Я создаю пользовательский XWalkResourceClient клиент, который перехватит все сетевые запросы. Весь запрос, который должен быть перехвачен, возвращается как абстрактная оболочка - AppWebResourceResponse.
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);
}
}
Последний шаг. Я должен приспособить AppWebResourceResponse to XWalkWebResourceResponse, и здесь у меня есть проблема.
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;
}
}
Согласно API имеет открытый конструктор new XWalkWebResourceResponse(bridge)
, потребляющий объект моста, хотя мне не удалось найти способ получить конкретный мост (org.xwalk.core.internal.XWalkWebResourceResponseBridge).
Где я могу найти XWalkWebResourceResponseBridge?
Спасибо, заранее.
Обновление на 25/04/2016:
По Xiaofeng можно создать XWalkWebResourceResponse объекта с помощью 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);
}
}
Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/12132999) –
@MayankPatel, спасибо, что вы напоминаете, но почему вы даете «не полезно»? – Xiaofeng