public class RetrofitUtil {
private static final RetrofitUtil ourInstance = new RetrofitUtil();
private ObservedApis observedApis;
public static RetrofitUtil getInstance() {
return ourInstance;
}
private RetrofitUtil() {
initView();
}
private void initView() {
//拦截器
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient mClient = new OkHttpClient.Builder()
//读取超时
.readTimeout(10, TimeUnit.SECONDS)
//连接超时
.connectTimeout(10, TimeUnit.SECONDS)
//写超时
.writeTimeout(10, TimeUnit.SECONDS)
//添加自定义拦截器
//new Interceptor
//请求头
.addInterceptor(new Interceptor() {
@Override
public okhttp3.Response intercept(Chain chain) throws IOException {
//拿到管理者
SharedPreferences mvplogin = MyApp.getContextInstace().getSharedPreferences("mvplogin", Context.MODE_PRIVATE);
//获取请求
Request original = chain.request();
//把旧请求的内容,全部复制给新的请求,保证在新的请求中依然有旧请求的所有数据
Request.Builder builder1 = original.newBuilder()
.addHeader("userId",mvplogin.getString("phone",""))
.addHeader("sessionId",mvplogin.getString("pwd",""));
//把新请求的builder,重新build成请求
Request request = builder1.build();
//发送请求,并且获得结果
okhttp3.Response proceed = chain.proceed(request);
return proceed;
}
}).build();
//Retrofit的创建
Retrofit mRetrofit = new Retrofit.Builder()
//添加Rxjava工厂
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.baseUrl(Api.BASE_URL)
.client(mClient)
.build();
observedApis = mRetrofit.create(ObservedApis.class);
}
//get请求
public void get(String url,CallBack callBack){
observedApis.get(url)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(getObserved(callBack));
}
//post请求
public void post(String url, Map<String, String> map, CallBack callBack) {
//一定要判空,如果是空,创建一个实例就可以了
if (map == null) {
map = new HashMap<>();
}
observedApis.post(url,map)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(getObserved(callBack));
}
//delete请求
public void delete(String url, CallBack callBack) {
observedApis.delete(url)
//后执行在哪个线程
.subscribeOn(Schedulers.io())
//最终完成后执行在哪个线程
.observeOn(AndroidSchedulers.mainThread())
.subscribe(getObserved(callBack));
}
//put请求
public void put(String url, Map<String, String> params, CallBack callBack) {
if (params == null) {
params = new HashMap<>();
}
observedApis.put(url, params)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(getObserved(callBack));
}
//图片上传
public void postImage(String url, File file, CallBack callBack) {
RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file);
MultipartBody.Part filePart = MultipartBody.Part.createFormData("image", file.getName(), requestBody);
observedApis.postImage(url, filePart)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(getObserved(callBack));
}
private Observer<? super ResponseBody> getObserved(final CallBack callBack) {
Observer<ResponseBody> responseBodyObserver = new Observer<ResponseBody>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
if (callBack!=null){
callBack.onError(e.getMessage());
}
}
@Override
public void onNext(ResponseBody responseBody) {
try {
String string = responseBody.string();
if (callBack!=null){
callBack.onSuccess(string);
}
} catch (IOException e) {
e.printStackTrace();
}
}
};
return responseBodyObserver;
}
//定义接口
public interface CallBack{
void onSuccess(String data);
void onError(String data);
}
}