RxJava 2+retrofitは簡単に使用でき、POST要求に基づいてツールクラスをカプセル化する

5332 ワード

まず依存
// Android    Rxjava
//          RxJava2   
compile 'io.reactivex.rxjava2:rxjava:2.0.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
// Android    Retrofit
compile 'com.squareup.retrofit2:retrofit:2.1.0'
//    Retrofit & RxJava
//          RxJava2   
compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'
//   Gson  
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
//   String
compile 'com.squareup.retrofit2:converter-scalars:2.0.0'
compile files('libs/fastjson.jar')
fastjsonは私自身のプロジェクトで使用する必要があり、Stringタイプに解析するのも私自身のプロジェクトで使用する必要があります.
プリライトインタフェース
public interface GetRequestInterface {

    @POST(".")
    Observable getCall(@Body JSONObject parms);
    
}
会社のプロジェクトはすべてpostリクエストなので、ツールクラスをカプセル化し、入力パラメータを直接呼び出すだけでいいです.
コールバックインタフェース
public interface HttpRequestUtils {
    /**
     *  post      
     * @param mContext    
     * @param url   
     * @param parmsJson  params  
     * @param listener
     */
    void loadingDataPost(Context mContext, String url, JSONObject parmsJson
            , OnLoadDataListener listener);

    public interface OnLoadDataListener {

        /**
         *       
         *
         * @param flag         ,                     
         * @param result        ,       
         */
        void onLoadCallBack(boolean flag, String result);

        /**
         *          ,
         *           flag=false  ,                
         *
         * @param errorStr      
         */
        void onError(String errorStr);
    }
}
ツールクラス
/**
 * Created by guoyan on 2017/6/1
 *          post  
 */

public class OkData {
    /**
     *        
     * @param url   url
     * @param parmsJson      fasejson JSONObject  
     * @param listener      
     */
    public void requesData(String url, JSONObject parmsJson, final HttpRequestUtils.OnLoadDataListener listener) {
        OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
        httpClient.addInterceptor(new Interceptor() {
            @Override
            public Response intercept(Interceptor.Chain chain) throws IOException {
                Request original = chain.request();
                Request request = original.newBuilder()
                        .addHeader("key", EncoderByMd5())
                        .addHeader("version", "1.5.1")
                        .addHeader("application/json", "charset=utf-8")
                        .method(original.method(), original.body())
                        .build();

                return chain.proceed(request);
            }
        });
        OkHttpClient client = httpClient.build();

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(url)
                .client(client)
                //     
                .addConverterFactory(ScalarsConverterFactory.create())
                //  gson
                .addConverterFactory(GsonConverterFactory.create())
                //  rejava2
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();

        GetRequestInterface requst = retrofit.create(GetRequestInterface.class);

        Observable call = requst.getCall(parmsJson);
        call.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        //    
                    }

                    @Override
                    public void onNext(String value) {
                        //    
                        if (listener != null) {
                            listener.onLoadCallBack(true, value);
                        }
                    }

                    @Override
                    public void onError(Throwable e) {
                        //    
                        if (listener != null) {
                            listener.onError(e.toString());
                        }
                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }
}
使用
private void initData() {
        JSONObject parmsJson = new JSONObject();
        parmsJson.put("client", "");
        parmsJson.put("blackBox", "");
        parmsJson.put("token", "");
        parmsJson.put("type_id", "");
        parmsJson.put("product_id", "");
        parmsJson.put("ruleSize", 7);
        OkData data = new OkData();
        data.requesData(url, parmsJson, new HttpRequestUtils.OnLoadDataListener() {
            @Override
            public void onLoadCallBack(boolean flag, String result) {
                Log.e("    ",result);
            }

            @Override
            public void onError(String errorStr) {
                Log.e("    ",errorStr);
            }
        });
}
ネットワークを要求するたびにこのメソッドを呼び出すだけで、パラメータを入力することができ、自分のニーズに応じて、自分でカスタマイズすることができます.
後で必要なときに見つからないようにブログに置いて、新しく書きます.