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〜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によると、私は特定の橋(org.xwalk.core.internal.XWalkWebResourceResponseBridge)を取得する方法を見つけることができなかったものの、ブリッジオブジェクトを消費し、パブリックコンストラクタnew XWalkWebResourceResponse(bridge)
を持っています。
どこから取得できますかXWalkWebResourceResponseBridge?
ありがとうございます。 25/04/2016上
更新:
Xiaofengによると、XWalkResourceClientオブジェクトを使用してXWalkWebResourceResponseオブジェクトを作成することが可能です。
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);
}
}
このリンクは質問に答えるかもしれませんが、ここでは答えの重要な部分を含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 - [レビューの投稿](レビュー/低品質の投稿/ 12132999) –
@MayankPatel、あなたの思い出させることに感謝しますが、なぜ "役に立たない" – Xiaofeng