Retrofit+RxJava+Okhttp

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);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值