RxAndroid+Retrofit+Rxbinding+RxBus先用再懂(1)
2016-06-21 18:03
633 查看
我是一个不啰嗦的程序猿。
这就开始了,是不是很突然。
最近有一个比较无语的BUG。由于retrofit更新换代,我在引入的时候。其中一个包引入了beat版本,结果一运行就报错,一开始还纳闷,然后试了各种方法,都没找到原因。最终的结论就是版本最好一起更新….
这里推荐一个当rxjava报错的时候logcat又不能正常报错的时候的方法。
我们先从Rxbingding开始。
我们先从问候大牛开始。向大神致敬
用法就是先导包。
针对不同控件、不同版本的支持。
Rxbingding最好的运用场景在与定时操作、循环操作。还有不能重复点击。
是不是非常方便,ok,你只要回答是就好了。
接下来单独的Retrofit,
首先我们定义一个interface
然后利用从网上得到的json串自动生成model。推荐插件:
可直接在androidstudio的插件管理那下载,安装完以后按Alt+s自动弹出,非常方便。
这里我们将Model命名为TestModel。名字一看就很有内涵。
retrofit脱胎于okhttp,所以使用方式比较像:
当然baseUrl最好定义一下,我这里为了更直观的了解所以直接填了网址,注意baseUrl最后最好都加“/”。
很简单是不是。一开始都这样。
接下来我们来将Rxjava跟retrofit结合一下:
我们这里先只讲用法。下期我们再结合源码去将这些方法有什么作用。
RxBus
大家对于数据传输,可能用的比较多的比如eventbus
RxBus其实只是rxjava的一个小运用。
首先我们封装一下RxBus.
在发送信息界面
在接收界面
当然,在适当的时候要回收资源对不对,毕竟它给我发了好人卡,不能忍。
OK,这些玩意的简单运用就是这样,接下来我会将这些玩意封装一下,让我们更好的去调用他们。
源码:
他让我写链接内容
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0'//retrofit for rxjava compile 'com.squareup.retrofit2:converter-gson:2.0.2'//gson compile 'com.squareup.okhttp3:logging-interceptor:3.2.0' compile 'com.squareup.okhttp3:okhttp:3.0.1' compile 'com.jakewharton.rxbinding:rxbinding-support-v4:0.4.0' compile 'com.jakewharton.rxbinding:rxbinding-leanback-v17:0.4.0' compile 'com.jakewharton.rxbinding:rxbinding:0.4.0' compile 'com.squareup.retrofit2:retrofit:2.0.2'
这就开始了,是不是很突然。
最近有一个比较无语的BUG。由于retrofit更新换代,我在引入的时候。其中一个包引入了beat版本,结果一运行就报错,一开始还纳闷,然后试了各种方法,都没找到原因。最终的结论就是版本最好一起更新….
这里推荐一个当rxjava报错的时候logcat又不能正常报错的时候的方法。
RxJavaPlugins.getInstance().registerErrorHandler(new RxJavaErrorHandler() { @Override public void handleError(Throwable e) { } });
我们先从Rxbingding开始。
我们先从问候大牛开始。向大神致敬
用法就是先导包。
//Platform bindings: compile 'com.jakewharton.rxbinding:rxbinding:0.4.0' //'support-v4' library bindings: compile 'com.jakewharton.rxbinding:rxbinding-support-v4:0.4.0' //'appcompat-v7' library bindings: compile 'com.jakewharton.rxbinding:rxbinding-appcompat-v7:0.4.0' //'design' library bindings: compile 'com.jakewharton.rxbinding:rxbinding-design:0.4.0' //'recyclerview-v7' library bindings: compile 'com.jakewharton.rxbinding:rxbinding-recyclerview-v7:0.4.0' //'leanback-v17' library bindings: compile 'com.jakewharton.rxbinding:rxbinding-leanback-v17:0.4.0'
针对不同控件、不同版本的支持。
Rxbingding最好的运用场景在与定时操作、循环操作。还有不能重复点击。
Button button=(Button)findViewById(R.id.bt_button); //判断短时间内不能重复点击 RxView.clicks(button).debounce(300, TimeUnit.MILLISECONDS).subscribe(new Action1<Void>() { @Override public void call(Void aVoid) { Intent intent =new Intent(MainActivity.this,SecondActivity.class); startActivity(intent); finish(); } }); //轮询操作,每两秒执行一次 Observable.interval(2,2,TimeUnit.SECONDS).subscribe(new Action1<Long>() { @Override public void call(Long aLong) { //TODO EVERTHING YOU WANT } }); //定时操作,两秒后执行 Observable.timer(2, TimeUnit.SECONDS).subscribe(new Action1<Long>() { @Override public void call(Long aLong) { //TODO WHAT YOU WANT RxBus.getInstance().post("我喜欢你"); } });
是不是非常方便,ok,你只要回答是就好了。
接下来单独的Retrofit,
首先我们定义一个interface
public interface ApiService { @GET("tnfs/api/list") Call<TestModel> getModel(@Query("id") int id); }
然后利用从网上得到的json串自动生成model。推荐插件:
可直接在androidstudio的插件管理那下载,安装完以后按Alt+s自动弹出,非常方便。
这里我们将Model命名为TestModel。名字一看就很有内涵。
retrofit脱胎于okhttp,所以使用方式比较像:
/** * 用Retrofit请求网络 */ private void init() { //拦截器 HttpLoggingInterceptor http=new HttpLoggingInterceptor(); http.setLevel(HttpLoggingInterceptor.Level.BODY); OkHttpClient client = new OkHttpClient.Builder().addInterceptor(http).build(); Retrofit retrofit=new Retrofit.Builder() .baseUrl("http://www.tngou.net/") //这里用的天狗云的公共api .addConverterFactory(GsonConverterFactory.create()) .client(client) .build(); ApiService apiService = retrofit.create(ApiService.class); Call<TestModel> call=apiService.getModel(1); call.enqueue(new Callback<TestModel>() { @Override public void onResponse(Call<TestModel> call, Response<TestModel> response) { Log.e("TAG","成功"); } @Override public void onFailure(Call<TestModel> call, Throwable t) { } }); }
当然baseUrl最好定义一下,我这里为了更直观的了解所以直接填了网址,注意baseUrl最后最好都加“/”。
很简单是不是。一开始都这样。
接下来我们来将Rxjava跟retrofit结合一下:
/** * 用rxAndroid + Retrofit请求网络数据 */ public void init2(){ Retrofit retrofit=new Retrofit.Builder() .baseUrl("http://www.tngou.net/") .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); ApiService apiService = retrofit.create(ApiService.class); apiService.getNewModel(1) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<TestModel>() { @Override public void onCompleted() { a387 Log.e("TAG","onNext"); } @Override public void onError(Throwable e) { Log.e("TAG","onError="+e); } @Override public void onNext(TestModel testModel) { Log.e("TAG","onNext"); Log.e("TAG","onNext"+testModel.getTngou().get(0).getTitle()); } }); }
我们这里先只讲用法。下期我们再结合源码去将这些方法有什么作用。
RxBus
大家对于数据传输,可能用的比较多的比如eventbus
RxBus其实只是rxjava的一个小运用。
首先我们封装一下RxBus.
public class RxBus { private final Subject<Object, Object> rx_bus; //单例 private static class RxBusHolder { private static final RxBus instance = new RxBus(); } private RxBus() { rx_bus = new SerializedSubject<>(PublishSubject.create()); } public static synchronized RxBus getInstance() { return RxBusHolder.instance; } public void post(Object o) { rx_bus.onNext(o); } public <T> Observable<T> toObserverable(Class<T> eventType) { return rx_bus.ofType(eventType); } }
在发送信息界面
RxBus.getInstance().post("对不起,你是个好人");
在接收界面
Subscription mSubscription = RxBus.getInstance().toObserverable(String.class).subscribe(new Action1<String>() { @Override public void call(String s) { Log.e("","s="+s); } });
当然,在适当的时候要回收资源对不对,毕竟它给我发了好人卡,不能忍。
//取消订阅 mSubscription.unsubscribe();
OK,这些玩意的简单运用就是这样,接下来我会将这些玩意封装一下,让我们更好的去调用他们。
源码:
他让我写链接内容
相关文章推荐
- Android中通过RxJava进行响应式程序设计的入门指南
- Java扩展库RxJava的基本结构与适用场景小结
- Java的RxJava库操作符的用法及实例讲解
- 浅析RxJava处理复杂表单验证问题的方法
- RxJava入门指南及其在Android开发中的使用示例
- Android Retrofit 2.0框架上传图片解决方案
- 跟我一起看Retrofit 2.0的源码
- RxJava之subscribeOn解惑
- Retrofit官方简介
- Rxjava
- RxJava(ReactiveX,Observable)的一些大白话
- http缓存
- Retrofit2.0结合RxAndroid实现二次封装
- android REST APIs 工具 Retrofit的应用
- RxAndroid + Retrofit + Databinding
- android开发练习二-Retrofit
- Retrofit之Query注解
- RxJava的简介和简单使用
- Retrofit
- Rxjava