导入依赖
ext {
// Sdk and tools
minSdkVersion = 19
targetSdkVersion = 26
compileSdkVersion = 26
buildToolsVersion = '26.0.2'
//support版本
supportVersion = '27.1.0'
constraintLayout = '1.0.2'
junit = '4.12'
testRunner = '1.0.1'
espressoCore = '3.0.1'
interceptor = "3.11.0"
retrofit = '2.3.0'
converterGson = '2.3.0'
rxandroid = '1.2.1'
rxjava = '1.3.0'
rxbus = '1.0.6'
adapterRxjava = '2.0.2'
}
// 网络请求Retrofit & OkHttp & Rxjava
implementation "com.squareup.okhttp3:logging-interceptor:$rootProject.interceptor"
implementation "com.squareup.retrofit2:retrofit:$rootProject.retrofit"
implementation "com.squareup.retrofit2:converter-gson:$rootProject.converterGson"
implementation "io.reactivex:rxandroid:$rootProject.rxandroid"
implementation "io.reactivex:rxjava:$rootProject.rxjava"
implementation "com.hwangjr.rxbus:rxbus:$rootProject.rxbus"
implementation "com.squareup.retrofit2:adapter-rxjava:$rootProject.adapterRxjava"
// RetrofitHttp包
public interface BaseApis<T> {
@GET
Observable<ResponseBody> get(@Url String url);
@POST
Observable<ResponseBody> post(@Url String url, @QueryMap Map<String,String> map);
}
public class RetrofitHttp<T> {
private static volatile RetrofitHttp mretrofitHttp;
public static synchronized RetrofitHttp getInstense(){
if(mretrofitHttp==null){
mretrofitHttp= new RetrofitHttp();
}
retvolatileurn mretrofitHttp;
}
public BaseApis mbaseApis;
public RetrofitHttp(){
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.connectTimeout(10,TimeUnit.SECONDS);
builder.readTimeout(10,TimeUnit.SECONDS);
builder.writeTimeout(10,TimeUnit.SECONDS);
builder.retryOnConnectionFailure(true);
builder.addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY));
OkHttpClient client = builder.build();
Retrofit retrofit = new Retrofit.Builder()
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.baseUrl(Apis.BASE_URL)
.client(client)
.build();
mbaseApis = retrofit.create(BaseApis.class);
}
public RetrofitHttp get(String url){
mbaseApis.get(url)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);
return mretrofitHttp;
}
public RetrofitHttp post(String url, Map<String,String> map){
if(map==null){
map = new HashMap<>();
}
mbaseApis.post(url,map)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);
return mretrofitHttp;
}
public Observer observer = new Observer<ResponseBody>() {
@Override
public void onNext(ResponseBody responseBody) {
try {
String data = responseBody.string();
if(listener!=null){
listener.onSuccess(data);
}
} catch (Exception e) {
e.printStackTrace();
if(listener!=null){
listener.onFail(e.getMessage());
}
}
}
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
if(listener!=null){
listener.onFail(e.getMessage());
}
}
};
private HttpListener listener;
public void result(HttpListener listener) {
this.listener = listener;
}
public interface HttpListener {
void onSuccess(String data);
void onFail(String error);
}
}