1.创建接口
public interface PostActivation {
String BASE_URL = "xxx";
@Headers({"Content-Type: application/json","Accept: application/json"})//需要添加头
@POST("app/{action}")
Observable<List<DtcCustom>> postActivation(@Body DtcCustom DtcCustom, @Path("action") String action);//传入的参数为RequestBody
}
2.封装rx+retorfit
创建ServiceFactory类
package com.xtool.dtcquery.http;
import com.xtool.dtcquery.http.converter.JsonConverterFactory;
import java.lang.reflect.Field;
import java.util.concurrent.TimeUnit;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
public class ServiceFactory {
public ServiceFactory() {
}
private static class SingletonHolder {
private static final ServiceFactory INSTANCE = new ServiceFactory();
}
public static ServiceFactory getInstance() {
return SingletonHolder.INSTANCE;
}
public <T> T createService(Class<T> serviceClass) {
String baseUrl = "";
try {
Field field1 = serviceClass.getField("BASE_URL");
baseUrl = (String) field1.get(serviceClass);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.getMessage();
e.printStackTrace();
}
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.client(getOkHttpClient())
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
return retrofit.create(serviceClass);
}
private final static long DEFAULT_TIMEOUT = 10;
private OkHttpClient getOkHttpClient() {
//定制OkHttp
OkHttpClient.Builder httpClientBuilder = new OkHttpClient.Builder();
//设置超时时间
httpClientBuilder.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);
httpClientBuilder.writeTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);
httpClientBuilder.readTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);
//设置缓存
// File httpCacheDirectory = new File(FileUtils.getCacheDir(SolidApplication.getInstance()), "OkHttpCache");
// httpClientBuilder.cache(new Cache(httpCacheDirectory, 10 * 1024 * 1024));
return httpClientBuilder.build();
}
}
3.如何使用
ServiceFactory.getInstance().createService(PostActivation.class)
.postActivation(dtc,"xxx.action")
.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<List<DtcCustom>>() {
@Override
public void onCompleted() {
Log.e(TAG, "onCompleted");
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "onError:");
e.printStackTrace();
}
@Override
public void onNext(List<DtcCustom> dtcCustoms) {
Log.e(TAG, "onNext");
}
}
});