Retrofit+Rxjava+okhttp基本使用

6471 ワード

Retrofit+Rxjava+okhttp基本使用

    new Retrofit.Builder()
                // retrofit OkHttpClient
                .client(new OkHttpClient().newBuilder()
                        .connectTimeout(500, TimeUnit.SECONDS)
                        .readTimeout(500, TimeUnit.SECONDS)
                        .build()
                )
                // baseUrl
                .baseUrl("")
                //gosn , bean
                .addConverterFactory(GsonConverterFactory.create())
                // Rx
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                // observable , 
                .build()
                // service 
                .create(RxService.class)
                // , Observable 
                .get("")
                // 
                .subscribeOn(Schedulers.io())
                // 
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer() {
                    @Override
                    public void accept(Bean bean) throws Exception {
                        //dosomething
                    }
                });
}
 interface RxService {
    @GET("path/{index}")
    Observable get(@Path("index") String index);

Retrofit+okhttpは、ネットワーク要求Rxjavaが非同期処理とスレッド制御を担当する
以上のコードはインタフェースを呼び出す.get()の前の一連の操作は,一度のネットワーク要求イベントソースを容易に1つのNetutilsクラスにカプセル化してObservableネットワーク要求イベントソースオブジェクトNetutilsクラスを出力できるようにするために,Creatメソッドは2つのパラメータ,1つのbaseUrl,1つのインタフェース,出力Observableオブジェクトをビジネスに応じて拡張することができる
public class NetUtils {

    private static NetUtils mClient;

    private OkHttpClient.Builder mBuilder;

    private NetUtils() {
        initOkHttp();
    }

    public static NetUtils getInstance() {
        if (mClient == null) {
            synchronized (NetUtils.class) {
                if (mClient == null) {
                    mClient = new NetUtils();
                }
            }
        }
        return mClient;
    }

    public  T create(Class service, String baseUrl) {
        checkNotNull(service, "service is null");
        checkNotNull(baseUrl, "baseUrl is null");

        return new Retrofit.Builder()
                .baseUrl(baseUrl)                                           //baseurl 
                .client(mBuilder.build())                                   //okhttpClient
                .addConverterFactory(GsonConverterFactory.create())         //Gson
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())  //Rx
                .build()                                                    // 
                .create(service);                                           // service , 
    }

    private  T checkNotNull(T object, String message) {
        if (object == null) {
            throw new NullPointerException(message);
        }
        return object;
    }

    private void initOkHttp() {

        mBuilder = new OkHttpClient.Builder()
                .connectTimeout(5, TimeUnit.SECONDS)
                .readTimeout(5, TimeUnit.SECONDS);
    }
}


使用時:
NetUtils .getInstance()
                .create(RxService.class, BaseUrl)
                .get("")//                                   
                .subscribeOn(Schedulers.io())                      
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer() {
                    @Override
                    public void accept(NewsDataBean newsDataBean) throws Exception {
                        //dosomthing
                    }
                });