Project Name | Stars | Downloads | Repos Using This | Packages Using This | Most Recent Commit | Total Releases | Latest Release | Open Issues | License | Language |
---|---|---|---|---|---|---|---|---|---|---|
Rxandroid | 19,803 | 10,146 | 267 | a month ago | 6 | February 15, 2019 | 1 | apache-2.0 | Java | |
RxJava bindings for Android | ||||||||||
Rxjava2 Android Samples | 4,977 | 9 months ago | 18 | apache-2.0 | Java | |||||
RxJava 2 Android Examples - How to use RxJava 2 in Android | ||||||||||
Awesome Rxjava | 4,834 | 2 years ago | 5 | |||||||
RxJava resources | ||||||||||
Autodispose | 3,325 | 24 | 16 | 6 days ago | 18 | September 18, 2019 | 3 | apache-2.0 | Java | |
Automatic binding+disposal of RxJava streams. | ||||||||||
Reactivenetwork | 2,508 | 75 | 10 months ago | 28 | September 17, 2019 | 36 | apache-2.0 | Java | ||
Android library listening network connection state and Internet connectivity with RxJava Observables | ||||||||||
Materialistic | 2,240 | 6 months ago | 432 | apache-2.0 | Java | |||||
A material-design Hacker News Android reader | ||||||||||
Rxbus | 2,088 | 102 | 1 | 3 years ago | 13 | August 27, 2021 | 6 | apache-2.0 | Java | |
Event Bus By RxJava. | ||||||||||
Photonoter | 1,593 | 5 years ago | Java | |||||||
:notebook:Material Design风格的开源照片笔记。(MVP+Dagger2+RxJava+AspectJ+Dex处理) | ||||||||||
Novelreader | 1,116 | 4 years ago | 42 | mit | Java | |||||
仿照"任阅"的追书、看书的小说阅读器。重写"任阅"的代码,优化代码逻辑和代码结构,降低内存使用率。重写小说阅读器,支持网络阅读、本地阅读(支持分章,虚拟分章)。支持仿真翻页、上下滚动翻页等翻页效果。支持小说断点续传功能。优化用户使用体验。 | ||||||||||
Aiyagirl | 1,106 | 4 years ago | 1 | Kotlin | ||||||
:fire: 爱吖妹纸(含 Kotlin 分支版本)——Retrofit + RxJava + MVP 架构 APP 体验代码家的干货集中营 Gank.io,福利多多,不容错过 |
开始在build.gradle添加依赖
compile 'io.reactivex:rxjava:1.0.9'
compile 'io.reactivex:rxandroid:0.24.0'
compile 'com.squareup.retrofit:retrofit:1.9.0'
需要的权限
<uses-permission android:name="android.permission.INTERNET" />
使用RxjavaUtil请求数据时需要和Retrofit连用,第一步就是使用Retrofit定义所有功能接口的API服务类,以天气接口为例。,
参数声明,Url都通过Annotation指定,接口定义如下:
private interface AppApi {
@GET("/weather")
WeatherData getWeather(@Query("q") String city, @Query("mode") String mode, @Query("APPID") String APPID);
}
返回数据如下,可以使用GsonFormat自动生成javabean(即WeatherData):
{"coord":{"lon":114.07,"lat":22.55},"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}],"base":"stations","main":{"temp":293.15,"pressure":1018,"humidity":72,"temp_min":293.15,"temp_max":293.15},"visibility":10000,"wind":{"speed":3.69,"deg":116.004},"clouds":{"all":0},"dt":1483538400,"sys":{"type":1,"id":7420,"message":0.0134,"country":"CN","sunrise":1483484686,"sunset":1483523588},"id":1795565,"name":"Shenzhen","cod":200}
第二步是通过RestAdapter生成API接口服务的实现类(动态代理)
private static final RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint(ENDPOINT).setLogLevel(RestAdapter.LogLevel.FULL).build();
private static final AppApi appService = restAdapter.create(AppApi.class);
第三步是关键的一步,将返回的数据类型包装到一个数据源(Observable)中。 onNext是RxJava发送事件,即开始请求数据,onCompleted为结束任务的事件,subscribeOn为指定获取数据的线程为耗时线程。
public static Observable<WeatherData> getWeatherData(final String city) {
return Observable.create(new Observable.OnSubscribe<WeatherData>() {
@Override
public void call(Subscriber<? super WeatherData> subscriber) {
subscriber.onNext(appService.getWeather(city,"json", "6c113432fd84a6e28268af291821db16"));
subscriber.onCompleted();
}
}).subscribeOn(Schedulers.io());
}
最后调用封装好的方法就可以了,拿到数据后,在主线程中回调(subscribeOn(Schedulers.io()),获取单个天气示例如下:
RxJavaUtil.getWeatherData(cityName).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<WeatherData>() {
@Override
public void call(WeatherData weatherData) {
Log.d(LOG_TAG, weatherData.toString());
switch (cityName){
case "beijing":
mTv1.setText(weatherData.toString());
break;
case "shenzhen":
mTv2.setText(weatherData.toString());
break;
case "shanghai":
mTv3.setText(weatherData.toString());
break;
}
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
Log.e(LOG_TAG, throwable.getMessage(), throwable);
}
});
当获取多个天气时候,要使用到Rxjava的变换,简单点理解,就是一个数据源变成多个数据源,一对多的映射关系。
Observable.from(cities).flatMap(new Func1<String, Observable<WeatherData>>() {
@Override
public Observable<WeatherData> call(String city) {
return RxJavaUtil.getWeatherData(city);
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(/*onNext*/new Action1<WeatherData>() {
@Override
public void call(WeatherData weatherData) {
String cityName = weatherData.name.toLowerCase();
switch (cityName){
case "beijing":
mTv1.setText(weatherData.toString());
break;
case "shenzhen":
mTv2.setText(weatherData.toString());
break;
case "shanghai":
mTv3.setText(weatherData.toString());
break;
}
}
}, /*onError*/new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
}
});}