BaseApis:
/**
*
* @详情 RXjava的被观察者
*
* @创建日期 2018/12/29 15:00
*
*/
public interface ObservedApis {
@GET
Observable<ResponseBody> get(@Url String url);
@POST
Observable<ResponseBody> post(@Url String url, @QueryMap Map<String,String> parmas);
@DELETE
Observable<ResponseBody> delete(@Url String url);
@PUT
Observable<ResponseBody> put(@Url String url, @QueryMap Map<String,String> parmas);
@POST
@Multipart
Observable<ResponseBody> postImage(@Url String url , @Part MultipartBody.Part parts);
@POST
@Multipart
Observable<ResponseBody> postImageContent(@Url String url ,@QueryMap Map<String, String> map ,@Part MultipartBody.Part parts);
@POST
@Multipart
Observable<ResponseBody> postDuoContent(@Url String url ,@QueryMap Map<String, String> map ,@Part MultipartBody.Part[] parts);
/*@Multipart//这里一定要加这个
@POST("market/addNewOrder")
Observable<ResultBean> addNewOrder(@QueryMap Map<String, String> map, @Part MultipartBody.Part pic);*/
}
RetrofitUtil:
/**
*
* @详情 Retrofit网络请求的工具类
*
* @创建日期 2018/12/29 15:02
*
*/
public class RetrofitUtil {
private static RetrofitUtil instance;
private ObservedApis mObservedApis;
private final String BaseUrl="http://mobile.bwstudent.com/small/";
public static synchronized RetrofitUtil getInstance(){
if (instance==null){
instance=new RetrofitUtil();
}
return instance;
}
private RetrofitUtil(){
//拦截器
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)
//添加拦截器
.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request original=chain.request();
//取出保存的userID,sessionID
SharedPreferences mSharedPreferences=MyApplication.getContext().getSharedPreferences("User",Context.MODE_PRIVATE);
String userId = mSharedPreferences.getString("userId","");
String sessionId = mSharedPreferences.getString("sessionId", "");
Request.Builder builder1 = original.newBuilder();
builder1.method(original.method(),original.body());
if(!TextUtils.isEmpty(userId)&&!TextUtils.isEmpty(sessionId)){
builder1.addHeader("userId",userId);
builder1.addHeader("sessionId",sessionId);
}
Request request = builder1.build();
return chain.proceed(request);
}
})
.build();
//Retrofit的创建
Retrofit mRetrofit=new Retrofit.Builder()
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.baseUrl(BaseUrl)
.client(mClient)
.build();
mObservedApis=mRetrofit.create(ObservedApis.class);
}
//get请求
public void get(String url,ICallBack callBack){
mObservedApis.get(url)
//后执行在哪个线程
.subscribeOn(Schedulers.io())
//最终完成后执行在哪个线程
.observeOn(AndroidSchedulers.mainThread())
.subscribe(getObserver(callBack));
}
//post请求
public void post(String url, Map<String,String> params,ICallBack callBack){
if (params==null){
params=new HashMap<>();
}
mObservedApis.post(url,params)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(getObserver(callBack));
}
//delete请求
public void delete(String url,ICallBack callBack){
mObservedApis.delete(url)
//后执行在哪个线程
.subscribeOn(Schedulers.io())
//最终完成后执行在哪个线程
.observeOn(AndroidSchedulers.mainThread())
.subscribe(getObserver(callBack));
}
//put请求
public void put(String url, Map<String,String> params,ICallBack callBack){
if (params==null){
params=new HashMap<>();
}
mObservedApis.put(url,params)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(getObserver(callBack));
}
//图片上传
public void postimage(String url, File file,ICallBack callBack){
RequestBody requestBody=RequestBody.create(MediaType.parse("multipart/form-data"),file);
MultipartBody.Part filePart=MultipartBody.Part.createFormData("image",file.getName(),requestBody);
mObservedApis.postImage(url,filePart)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(getObserver(callBack));
}
//图文上传
public void postimagecon(String url,Map<String,String> params, File file,ICallBack callBack){
RequestBody requestBody=RequestBody.create(MediaType.parse("multipart/form-data"),file);
MultipartBody.Part filePart=MultipartBody.Part.createFormData("image",file.getName(),requestBody);
mObservedApis.postImageContent(url,params,filePart)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(getObserver(callBack));
}
//多图文上传
public void postduocon(String url,Map<String,String> params, List<File> list,ICallBack callBack){
MultipartBody.Part[] parts=new MultipartBody.Part[list.size()];
int index=0;
for (File file: list){
RequestBody requestBody=RequestBody.create(MediaType.parse("multipart/form-data"),file);
MultipartBody.Part filePart=MultipartBody.Part.createFormData("image",file.getName(),requestBody);
parts[index]=filePart;
index++;
}
mObservedApis.postDuoContent(url,params,parts)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(getObserver(callBack));
}
private Observer getObserver(final ICallBack callBack) {
//Rxjava
Observer observer=new Observer<ResponseBody>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
if (callBack!=null){
callBack.failure(e.getMessage());
Log.i("Tag",e.getMessage());
}
}
@Override
public void onNext(ResponseBody responseBody) {
try {
String result = responseBody.string();
if (callBack!=null){
callBack.success(result);
}
} catch (Exception e) {
e.printStackTrace();
if (callBack!=null){
callBack.failure(e.getMessage());
}
}
}
};
return observer;
}
public interface ICallBack{
void success(String result);
void failure(String error);
}
}