rxjava封装,RxBus封装(上线项目集成,声明周期管理,无内存溢出内存,支持同时多个请求。)

Posted 我又不会乱来

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rxjava封装,RxBus封装(上线项目集成,声明周期管理,无内存溢出内存,支持同时多个请求。)相关的知识,希望对你有一定的参考价值。

  Github地址

RxLibrary工程:
1.rxjava2 + retrofit2的封装,常用的请求(Get,Post,文件上传,文件下载),简单便捷,支持自定义loading等属性。
2.RxBus的使用,用法完全与EvenBus一样。

效果图

技术分享图片

 

集成

compile ‘com.bhm.sdk.rxlibrary:RxLibrary:2.3.1‘


或者

<dependency>
  <groupId>com.bhm.sdk.rxlibrary</groupId>
  <artifactId>RxLibrary</artifactId>
  <version>2.3.1</version>
  <type>pom</type>
</dependency>

一、rxjava2 + retrofit2的使用

   强烈建议参考demo,MianActivity包含了常用的用法及用法介绍。    
第一步,继承RxBaseActivity或者RxBaseFragment,添加内存管理的机制,同时获取rxManager对象,rxManager是管理观察者的类,当取消请求、中断请求等可调用对应的方法。注意:如果项目BaseActivity继承了别的Activity,则需在BaseActivity中添加RxAppCompatActivity的代码,并且生成RxManager对象,Fragment同理哦。    
第二步,使用。

    RxBuilder builder = RxBuilder.newBuilder(this)
            //.setLoadingDialog(RxLoadingDialog.getDefaultDialog())
            .setLoadingDialog(new MyLoadingDialog())
            .setDialogAttribute(true, false, false)
            //.setHttpTimeOut()
            .setIsLogOutPut(false)//默认是true
            .setIsDefaultToast(true, rxManager)
            .bindRx();
    builder.createApi(HttpApi.class, Host)
            .getData("Bearer aedfc1246d0b4c3f046be2d50b34d6ff", "1")
            .compose(bindToLifecycle())//管理生命周期
            .compose(RxManager.rxSchedulerHelper())//发布事件io线程
            .subscribe(new RxObserver<Object>(builder) {//Object可以替换成实体类,无需再解析
                //根据业务需要,可继承RxObserver重写类,对onFail和onSuccess进行解析,根据resultCode进行处理
                @Override
                public void onStart(Disposable disposable) {

                }

                @Override
                public void onSuccess(Object response) {
                    Log.i("onSuccess-------> ", response.toString());
                }

                @Override
                public void onDone() {

                }

                @Override
                public void onFail(Throwable t) {

                }
            });

 

   HttpApi是一个接口,getData是HttpApi中的方法。
   Host 为域名。
                        

以下介绍下HttpApi中常用注解的使用:

    1.get请求:方法前添加@GET("url"),参数 @Query、@QueryMap
    <br>例(url和域名拼接好后组成完整链接,当然我们不需要自己拼接,Retrofit会处理)</br>
    @GET("福利/10/1")
    Observable<Object> getData(@Header("token") String token, @Query("type")  String type);     
    2.post请求:方法前添加@FormUrlEncoded和@POST("url")
      Observable<Object> getDataPost(@Field("once") boolean once_no);
    3.文件上传:方法前添加@Multipart和@POST("url")
        Observable<Object> upload(
        @Header("token") String token,
        @Part("filename") RequestBody description,
        @Part("id") RequestBody id,
        @Part MultipartBody.Part file);
       其中RequestBody的生成:
       RequestBody.create(MediaType.parse("text/plain"),"id"
       MultipartBody.Part的生成:
       RequestBody requestBody = RequestBody.create(MediaType.parse("image/jpeg; charset=UTF-8"),file);
       MultipartBody.Part part= MultipartBody.Part.createFormData("file", file.getName(), requestBody);
    4.文件下载:方法前添加@Streaming和@GET
    @Streaming
    @GET
    Observable<ResponseBody> downLoad(@Url String url);
    其中@GET后不需指定url,参数@Url指定了完整的url,所以也不需域名Host的指定。

二、RxBus的使用

1.订阅RxBus.get().register(this);

一般在activity/fragment的oncreate方法中添加

2.取消订阅RxBus.get().unRegister(this);

 一般在activity/fragment的的ondestory方法添加

3.接收event,处理

在activity/fragment中添加如下方法
  
@Subscribe(code = 1111,threadMode = ThreadMode.MAIN)
public void rxBusEvent(Entity entity){
    if(null != entity){
    Toast.makeText(this, "RxBus改变了MainActivity的标题", Toast.LENGTH_SHORT).show();      
    }
}
   
threadMode:MAIN,NEW_THREAD,CURRENT_THREAD(默认)

4.在任意一个地方发送

  RxBus.get().send(1111, entity);







以上是关于rxjava封装,RxBus封装(上线项目集成,声明周期管理,无内存溢出内存,支持同时多个请求。)的主要内容,如果未能解决你的问题,请参考以下文章

retrofit+RXjava二次封装

干货,RxJava和Retrofit的有力封装,简便使用

Kotlin实现RxBus3

Kotlin实现RxBus3

Kotlin实现RxBus3

Android消息传递之基于RxJava实现一个EventBus - RxBus