第一步:添加依赖:
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"
然后在项目的build.gradle下配置版本号:
ext {
// Sdk and tools
minSdkVersion = 17 //和model 下的build.gradle版本对应
targetSdkVersion = 28
compileSdkVersion = 28
buildToolsVersion = '28.0.2'
//support版本
supportVersion = '28.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'
}
第二步:设置get请求、post请求、表单post请求:
public interface BaseApis<T> {
@GET (url:除基础外的网址其余部分)
Observable<ResponseBody> get(@Url String url);
@POST (map:网址中的重要参数)
Observable<ResponseBody> post(@Url String url, @QueryMap Map<String, String> map);
@Multipart
@POST (RequestBody)
Observable<ResponseBody> postFormBody(@Url String url, @PartMap Map<String, RequestBody> map);
}
第三步:工具类
package com.example.lenovo.work11_06.until;
import com.google.gson.Gson;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import rx.Observer;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
public class RetrofitUntil {
/**
* 1.单例
*/
private static RetrofitUntil instance;
private final OkHttpClient mClient;
private final Retrofit mRetrofit;
private final BaseApis mBaseApis;
public static RetrofitUntil getInstance(){
if (instance==null){
instance=new RetrofitUntil();
}
return instance;
}
private RetrofitUntil(){
//2.日志拦截器
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
//3.管理者
mClient = new OkHttpClient.Builder()
.addInterceptor(interceptor)
.connectTimeout(10,TimeUnit.SECONDS)
.readTimeout(10,TimeUnit.SECONDS)
.writeTimeout(10,TimeUnit.SECONDS)
.build();
//4.retrofit
//基础网址
String BASA_PATH="http://www.zhaoapi.cn/product/";
mRetrofit = new Retrofit.Builder()
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.baseUrl(BASA_PATH)
.client(mClient)
.build();
mBaseApis = mRetrofit.create(BaseApis.class);
}
/**
*
* 5.接口
*/
public interface CallBack{
void faile(String error);
void success(String t);
}
public CallBack mCallBack;
public void setCallBack(CallBack callBack) {
mCallBack = callBack;
}
/**
* 6.Observer
*/
private Observer getObserver(final CallBack callBack){
Observer observer=new Observer<ResponseBody>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
if (callBack!=null){
callBack.faile(e.getMessage());
}
}
@Override
public void onNext(ResponseBody responseBody) {
try {
String string = responseBody.string();
if (callBack!=null){
callBack.success(string);
}
} catch (Exception e) {
e.printStackTrace();
}
}
};
return observer;
}
/**
* 7.post请求
*/
public RetrofitUntil post(String path, Map<String,String>map,CallBack callBack){
if (map==null){
map=new HashMap<>();
}
mBaseApis.post(path,map)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(getObserver(callBack));
return instance;
}
/**
* 8.get请求
*/
public RetrofitUntil get(String path,CallBack callBack){
mBaseApis.get(path)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(getObserver(callBack));
return instance;
}
/**
* 9.post表单请求:
* 1.先将Map<String,String>类型切换成Map<String,RequestBody>
*/
public Map<String, RequestBody> generateRequestBody(Map<String,String> requestDataMap){
Map<String,RequestBody> requestBodyMap = new HashMap<>();
for (String key : requestDataMap.keySet()){
RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/from-data"),
requestDataMap.get(key) == null ? "" :requestDataMap.get(key));
requestBodyMap.put(key,requestBody);
}
return requestBodyMap;
}
public RetrofitUntil postFromBody(String path,Map<String,RequestBody>map,CallBack callBack){
mBaseApis.postForm(path,map)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(getObserver(callBack));
return instance;
}
}