初探RxJava
来源:互联网 发布:淘宝达人报名入口 编辑:程序博客网 时间:2024/05/22 19:26
首先到底什么是RxJava,RxJava是一个相应式编程框架,采用观察者模式,既然使用观察者模式,就一定少不了观察者和被观察者。
RxJava 是一个开源项目,地址:https://github.com/ReactiveX/RxJava。
还有一个RxAndroid,用于 Android 开发,添加了 Android 用的接口。地址:https://github.com/ReactiveX/RxAndroid。(其实看他的Observable给我一种和Volley用法相似的感觉。。)
转载地址:http://www.cnblogs.com/halzhang/p/4458095.html。
RxJava资料参考:http://blog.piasy.com/AdvancedRxJava/2016/05/06/operator-concurrency-primitives/。
例子
通过请求openweathermap 的天气查询接口返回天气数据
1、增加编译依赖
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:22.0.0' compile 'io.reactivex:rxjava:1.0.9' compile 'io.reactivex:rxandroid:0.24.0' compile 'com.squareup.retrofit:retrofit:1.9.0'}
retrofit 是一个 restful 请求客户端。详见:http://square.github.io/retrofit/
2、服务器接口
/** * 接口 * Created by Hal on 15/4/26. */public class ApiManager { private static final String ENDPOINT = "http://api.openweathermap.org/data/2.5"; /** * 服务接口 */ private interface ApiManagerService { @GET("/weather") WeatherData getWeather(@Query("q") String place, @Query("units") String units); } private static final RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint(ENDPOINT).setLogLevel(RestAdapter.LogLevel.FULL).build(); private static final ApiManagerService apiManager = restAdapter.create(ApiManagerService.class); /** * 将服务接口返回的数据,封装成{@link rx.Observable} * @param city * @return */ public static Observable<WeatherData> getWeatherData(final String city) { return Observable.create(new Observable.OnSubscribe<WeatherData>() { @Override public void call(Subscriber<? super WeatherData> subscriber) { //订阅者回调 onNext 和 onCompleted subscriber.onNext(apiManager.getWeather(city, "metric")); subscriber.onCompleted(); } }).subscribeOn(Schedulers.io()); }}3、接口调用
/** * 多个 city 请求 * map,flatMap 对 Observable进行变换 */ Observable.from(CITIES).flatMap(new Func1<String, Observable<WeatherData>>() { @Override public Observable<WeatherData> call(String s) { return ApiManager.getWeatherData(s); } }).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(/*onNext*/new Action1<WeatherData>() { @Override public void call(WeatherData weatherData) { Log.d(LOG_TAG, weatherData.toString()); } }, /*onError*/new Action1<Throwable>() { @Override public void call(Throwable throwable) { } }); /** * 单个 city 请求 */ ApiManager.getWeatherData(CITIES[0]).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<WeatherData>() { @Override public void call(WeatherData weatherData) { Log.d(LOG_TAG, weatherData.toString()); ((TextView) findViewById(R.id.text)).setText(weatherData.toString()); } }, new Action1<Throwable>() { @Override public void call(Throwable throwable) { Log.e(LOG_TAG, throwable.getMessage(), throwable); } }); /** * Android View 事件处理 */ ViewObservable.clicks(findViewById(R.id.text), false).subscribe(new Action1<OnClickEvent>() { @Override public void call(OnClickEvent onClickEvent) { } });subscribeOn(Schedulers.io())与observeOn(AndroidSchedulers.mainThread())分别定义了这两个动作的线程。Android UI 更新需要在主线程。
4、retrofit 支持 rxjava 整合
/** * 服务接口 */ private interface ApiManagerService { @GET("/weather") WeatherData getWeather(@Query("q") String place, @Query("units") String units); /** * retrofit 支持 rxjava 整合 * 这种方法适用于新接口 */ @GET("/weather") Observable<WeatherData> getWeatherData(@Query("q") String place, @Query("units") String units); }个人感觉原文对RxJava的简单用法已经使用和解释的比较清楚了,电脑没电了先转过来,明天我会按照自己的理解重新写一个demo。(看到retrofit让想起了之前使用android annotations的感觉。。)
0 0
- 初探RxJava
- RxJava初探
- RxJava初探
- RxJava初探
- 初探RxJava
- RxJava初探
- RxJava 初探
- RxJava初探
- RxJava初探
- Rxjava、retrofit初探
- Android--RxJava源码初探
- RxJava 初探(一)
- RxJava代码初探(一)
- RxJava源码初探
- Android MVP RxJava 初探
- RxJava & Retrofit 初探
- 初探Okhttp3+Retrofit2+RXJava
- android初探rxjava
- ViewConfiguration.getScaledTouchSlop () 用法
- HTML入门笔记案例展示(1)
- 使用并查集判断无向图是否连通
- 使用VS2010自定义C++模板
- Idea的插件
- 初探RxJava
- Qt(三)--- 实现QQ登陆界面头像状态栏的功能
- 算法笔记——【动态规划】最大子段和问题
- 多线程下载
- 2016百度之星热身赛 1003
- JAVA中ListIterator和Iterator详解与辨析
- 如何将天天模拟器连接到eclipse中
- Serializable和Parcelable的用法
- debian8安装完之后要做的N件事