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