RxJava 的使用入门
来源:互联网 发布:钱宝数据助手新手套餐 编辑:程序博客网 时间:2024/05/19 03:44
一、什么是 RxJava?
RxJava 是一个响应式编程框架,采用观察者设计模式。所以自然少不了 Observable 和 Subscriber 这两个东东了。
RxJava 是一个开源项目,地址:https://github.com/ReactiveX/RxJava
还有一个RxAndroid,用于 Android 开发,添加了 Android 用的接口。地址:https://github.com/ReactiveX/RxAndroid
二、例子
通过请求openweathermap 的天气查询接口返回天气数据
1、增加编译依赖
1 dependencies {2 compile fileTree(dir: 'libs', include: ['*.jar'])3 compile 'com.android.support:appcompat-v7:22.0.0'4 compile 'io.reactivex:rxjava:1.0.9'5 compile 'io.reactivex:rxandroid:0.24.0'6 compile 'com.squareup.retrofit:retrofit:1.9.0'7 }
retrofit 是一个 restful 请求客户端。详见:http://square.github.io/retrofit/
2、服务器接口
1 /** 2 * 接口 3 * Created by Hal on 15/4/26. 4 */ 5 public class ApiManager { 6 7 private static final String ENDPOINT = "http://api.openweathermap.org/data/2.5"; 8 9 /**10 * 服务接口11 */12 private interface ApiManagerService {13 @GET("/weather")14 WeatherData getWeather(@Query("q") String place, @Query("units") String units);15 }16 17 private static final RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint(ENDPOINT).setLogLevel(RestAdapter.LogLevel.FULL).build();18 19 private static final ApiManagerService apiManager = restAdapter.create(ApiManagerService.class);20 21 /**22 * 将服务接口返回的数据,封装成{@link rx.Observable}23 * @param city24 * @return25 */26 public static Observable<WeatherData> getWeatherData(final String city) {27 return Observable.create(new Observable.OnSubscribe<WeatherData>() {28 @Override29 public void call(Subscriber<? super WeatherData> subscriber) {30 //订阅者回调 onNext 和 onCompleted31 subscriber.onNext(apiManager.getWeather(city, "metric"));32 subscriber.onCompleted();33 }34 }).subscribeOn(Schedulers.io());35 }36 }
订阅者的回调有三个方法,onNext,onError,onCompleted
3、接口调用
1 /** 2 * 多个 city 请求 3 * map,flatMap 对 Observable进行变换 4 */ 5 Observable.from(CITIES).flatMap(new Func1<String, Observable<WeatherData>>() { 6 @Override 7 public Observable<WeatherData> call(String s) { 8 return ApiManager.getWeatherData(s); 9 }10 }).subscribeOn(Schedulers.io())11 .observeOn(AndroidSchedulers.mainThread())12 .subscribe(/*onNext*/new Action1<WeatherData>() {13 @Override14 public void call(WeatherData weatherData) {15 Log.d(LOG_TAG, weatherData.toString());16 }17 }, /*onError*/new Action1<Throwable>() {18 @Override19 public void call(Throwable throwable) {20 21 }22 });23 24 /**25 * 单个 city 请求26 */27 ApiManager.getWeatherData(CITIES[0]).subscribeOn(Schedulers.io())28 .observeOn(AndroidSchedulers.mainThread())29 .subscribe(new Action1<WeatherData>() {30 @Override31 public void call(WeatherData weatherData) {32 Log.d(LOG_TAG, weatherData.toString());33 ((TextView) findViewById(R.id.text)).setText(weatherData.toString());34 }35 }, new Action1<Throwable>() {36 @Override37 public void call(Throwable throwable) {38 Log.e(LOG_TAG, throwable.getMessage(), throwable);39 }40 });41 42 /**43 * Android View 事件处理44 */45 ViewObservable.clicks(findViewById(R.id.text), false).subscribe(new Action1<OnClickEvent>() {46 @Override47 public void call(OnClickEvent onClickEvent) {48 49 }50 });
subscribeOn(Schedulers.io())与observeOn(AndroidSchedulers.mainThread())分别定义了这两个动作的线程。Android UI 更新需要在主线程。
4、retrofit 支持 rxjava 整合
1 /** 2 * 服务接口 3 */ 4 private interface ApiManagerService { 5 @GET("/weather") 6 WeatherData getWeather(@Query("q") String place, @Query("units") String units); 7 8 /** 9 * retrofit 支持 rxjava 整合10 * 这种方法适用于新接口11 */12 @GET("/weather")13 Observable<WeatherData> getWeatherData(@Query("q") String place, @Query("units") String units);14 }
Demo 代码
--------EOF-----
0 0
- RxJava 的使用入门
- RxJava 的使用入门
- RxJava 的使用入门
- RxJava的简单使用入门
- RxJava从入门到放弃1.0--rxjava的简单使用
- RX的使用一:RXjava初级入门
- 【Android】RxJava的入门使用系列教程
- RXJAVA的入门和使用总结
- RxJava的入门和基本使用
- Rxjava入门与使用
- RxJava入门使用
- RxJava使用入门
- RxJava使用入门
- RxJava入门使用教程
- RxJava的简单入门
- RxJava(RxAndroid)基本使用入门
- RxJava使用入门(二)
- RxJava(RxAndroid)基本使用入门
- 单点登录 Ucenter 分析
- 机器学习中的算法(1)-决策树模型组合之随机森林与GBDT
- http协议学习
- python爬虫urllib使用B
- 从oc到swift
- RxJava 的使用入门
- Android开发工具之Android Studio--如何打包sdk通过arr包的方式
- eclipse使用技巧小总结
- 开发环境的搭建
- Markdown教程
- zookeeper集群安装和配置
- NGUI UIScrollView 修改
- qevent 事件的accept()和ignore()
- Oracle安装错误ora-00922(缺少或无效选项)