2016-04-22 11 views
4

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); 
    }  
} 

最後の手順です。 適合する必要がありますAppWebResourceResponseXWalkWebResourceResponseこれは私が問題がある場所です。

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); 
    } 
} 

答えて

4

ありがとうCrosswalk。

XWalkWebResourceResponseを作成するには、XWalkResourceClientでcreateXWalkWebResourceResponseを使用する必要があります。hereを参照してください。内部ブロック問題のため、一般的なコンストラクタを使用して作成することはできません。ここで

はそれを使用する方法についてのサンプルです: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) 
    ... 
} 

}

あなたはまた後でXWalkViewのAPIドキュメントでこれを見ることができます。

+2

このリンクは質問に答えるかもしれませんが、ここでは答えの重要な部分を含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 - [レビューの投稿](レビュー/低品質の投稿/ 12132999) –

+0

@MayankPatel、あなたの思い出させることに感謝しますが、なぜ "役に立たない" – Xiaofeng

関連する問題