Rxシリーズ学習ノート_okhttpブロッキングを使用してリターンリクエストを統一的に処理
6110 ワード
前に簡単なお願いをしました.しかし、apiのObservableのタイプはすべてResponseDataパッケージを行うことを発見しました.ResponseDataのコードは次のとおりです.
結果
ここのflatMapでは、私たちのnewのFunc 1には小包のResponseDataが入っています.私たちの目標は、使用するときに私たちが望んでいるタイプに直接戻ることです.例えば、ここで私たちが望んでいるのはCheckDetailsDataオブジェクトです.では、私たちが最終的に変えなければならないのは次のようなモードです.戻ったデータは、外層を除去する必要のない小包を直接使用します.
これまでRxJavaとRetrofitを組み合わせたベストプラクティスを見たことがあるはずですが、ここでの処理方法はこうです.
1.まずRetrofit要求クラスに内部クラスHttpResultFuncを作成する
2.具体的な使用
以上のようにしても、データ統合処理要求の戻りを実現することができる.彼の異常などのデータはApiExceptionで処理されています.しかしこの中でmapではnewというオブジェクトに何度も行き、何度もお願いすると何度も創造します.文章の評論の下でこの問題を提起する人もいて、私のこの野菜と鶏は本当に蒙っていますが、仕方がなくてまだ直さなければなりません.彼はブロックを言ったので、私は調べてみました.文章はまだあります.Okhttpのブロッカーで直接ブロッキング処理が可能です.
リファレンス
http://blog.csdn.net/csdn_lqr/article/details/61420753
public class ResponseData {
private String ErrorCode;
private String ErrorMsg;
private String Status;
private T Data;
public String getErrorCode() {
return ErrorCode;
}
public void setErrorCode(String ErrorCode) {
this.ErrorCode = ErrorCode;
}
public String getErrorMsg() {
return ErrorMsg;
}
public void setErrorMsg(String ErrorMsg) {
this.ErrorMsg = ErrorMsg;
}
public String getStatus() {
return Status;
}
public void setStatus(String Status) {
this.Status = Status;
}
public T getData() {
return Data;
}
public void setData(T Data) {
this.Data = Data;
}
}
結果
.flatMap(new Func1, Observable>>() {
@Override
public Observable> call(ResponseData checkDetailsDataResponseData) {
return request.getMyApi().getRecordDetail2(checkDetailsDataResponseData.getData().getSerialNumber());
}
})
ここのflatMapでは、私たちのnewのFunc 1には小包のResponseDataが入っています.私たちの目標は、使用するときに私たちが望んでいるタイプに直接戻ることです.例えば、ここで私たちが望んでいるのはCheckDetailsDataオブジェクトです.では、私たちが最終的に変えなければならないのは次のようなモードです.戻ったデータは、外層を除去する必要のない小包を直接使用します.
new Func1, Observable...
これまでRxJavaとRetrofitを組み合わせたベストプラクティスを見たことがあるはずですが、ここでの処理方法はこうです.
1.まずRetrofit要求クラスに内部クラスHttpResultFuncを作成する
// Http resultCode, HttpResult Data subscriber, HttpResult ResponseData.
private class HttpResultFunc<T> implements Func1<HttpResult<T>, T>{
@Override
public T call(HttpResult httpResult) {
if (httpResult.getResultCode() != 0) {
throw new ApiException(httpResult.getResultCode());
}
return httpResult.getData();
}
}
2.具体的な使用
movieService.getTopMovie(start, count)
.map(new HttpResultFunc>())
.subscribeOn(Schedulers.io())
.unsubscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(subscriber);
以上のようにしても、データ統合処理要求の戻りを実現することができる.彼の異常などのデータはApiExceptionで処理されています.しかしこの中でmapではnewというオブジェクトに何度も行き、何度もお願いすると何度も創造します.文章の評論の下でこの問題を提起する人もいて、私のこの野菜と鶏は本当に蒙っていますが、仕方がなくてまだ直さなければなりません.彼はブロックを言ったので、私は調べてみました.文章はまだあります.Okhttpのブロッカーで直接ブロッキング処理が可能です.
httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient okHttpClient =new OkHttpClient.Builder()
.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
// Response Response
Response responseNew=filterResponse(request,chain);
return responseNew;
}
})
.addInterceptor(httpLoggingInterceptor)
.build();
retrofitBuild.client(okHttpClient);
リファレンス
http://blog.csdn.net/csdn_lqr/article/details/61420753