rxjava rxandroid mvp还要加rxjava包吗

主题信息(必填)
主题描述(最多限制在50个字符)
申请人信息(必填)
申请信息已提交审核,请注意查收邮件,我们会尽快给您反馈。
如有疑问,请联系
CSDN &《程序员》编辑/记者,投稿&纠错等事宜请致邮
你只管努力,剩下的交给时光!
如今的编程是一场程序员和上帝的竞赛,程序员要开发出更大更好、傻瓜都会用到软件。而上帝在努力创造出更大更傻的傻瓜。目前为止,上帝是赢的。个人网站:。个人QQ群:、
个人大数据技术博客:
Rxjava现在挺火,总的来说就是来解决异步操作的。
具体详细解释,csdn有的是,不赘述,这里只是提供例子。我也刚接触,大神勿喷请绕道。 最简单的例子(循环1秒加载输出日志一次),开篇第一步在你的build.grade里面的dependencies里面加上:compile 'io.reactivex:rxandroid:1.2.1'
compile 'io.reactivex:rxjava:1.1.6'第二步直接用啦!Observer&String& observer = new Observer&String&() {
public void onNext(String s) {
new Thread(){
public void run() {
for (int i = 0;i&=0;i++){
sleep(1000);
Log.d("rxjava", "测试"+i);
} catch (InterruptedException e) {
e.printStackTrace();
}.start();
public void onCompleted() {
Log.d("rxjava", "Completed!");
public void onError(Throwable e) {
Log.d("rxjava", "Error!");
Observable observable = Observable.create(new Observable.OnSubscribe&String&() {
public void call(Subscriber&? super String& subscriber) {
subscriber.onNext("Hello");
subscriber.onCompleted();
observable.subscribe(observer);Android开发【09-22求助贴】RxJava/RxAndroid结合Retrofit的疑问【android开发吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:117,918贴子:
Android开发【09-22求助贴】RxJava/RxAndroid结合Retrofit的疑问收藏
我想问下就是之前学习RxJava的时候是这样的:Observable&String& observable=Observable.just(&created by just&);这个observable的数据就是&created by just&但是换到retrofit从网络请求数据之后,我就不知道数据是什么时候从网络上获取到的了?subscribeOn是指定subscribe()发生的线程observeOn是指定subscriber回调发生的线程想请教下,发起网络请求是在哪里,subscribe()吗?
2017android开发入门教程 ?哪里便宜?万和0元入学!2017android开发入门教程 ?好就业吗?万和入学签订就业协议!
server.getStringcall就是开始请求了啊
登录百度帐号推荐应用使用RxJava实现延迟订阅 - 安卓 - 伯乐在线
& 使用RxJava实现延迟订阅
我越来越喜欢把RxJava的操作符作为一个工具来使用,以确保Observable代码在被订阅后才执行(而不是创建后立即执行)。,但是,现在我想做更详细的描述。
假设,有个数据类:
public class SomeType {
public void setValue(String value) {
this.value =
public Observable valueObservable() {
return Observable.just(value);
1234567891011
public class SomeType {&&private String value;&public void setValue(String value) {&&this.value = value;}&public Observable valueObservable() {&&return Observable.just(value);}}
这段代码在运行后会打印出什么呢?
SomeType instance = new SomeType();
Observable value = instance.valueObservable();
instance.setValue("Some Value");
value.subscribe(System.out::println);
SomeType instance = new SomeType();&&Observable value = instance.valueObservable();&&instance.setValue("Some Value");&&value.subscribe(System.out::println);
如果你认为会打印出“Some Value”,那就错了。而实际打印结果是“null”。因为在调用Observable.just()的时候,value已经初始化了。
just(),from()这类能够创建Observable的操作符(译者注:)在创建之初,就已经存储了对象的值,而不被订阅的时候。这种情况,显然不是预期表现,我想要的valueObservable()是无论什么时候请求,都能够表现为当前值。
一个解决办法就是使用Observable.create(),因为它允许为每个订阅者精确控制事件的发送。
public Observable valueObservable() {
return Observable.create(new Observable.OnSubscribe() {
@Override public void call(Subscriber super String& subscriber) {
subscriber.onNext(value);
subscriber.onCompleted();
public Observable valueObservable() {&&return Observable.create(new Observable.OnSubscribe() {&&&&@Override public void call(Subscriber super String& subscriber) {&&&&&&&subscriber.onNext(value);&&&&&&subscriber.onCompleted();&&&&}&&});}
现在,valueObservable()将在订阅的时候发送当前值(事件)。它除了在订阅的时候才获取value(而不是创建的时候)之外,看起来和Observable.just()所做的没什么两样。
现在唯一的问题是,自从阅读Dávid Karnok的后(译者注:简直不能更优秀,一定要看),我一直小心翼翼的编写着自定义的操作符(译者注:原著的意思是指,自定义操作符内部处理方式,如上面代码中的subscriber.onNext(value)等)。通过阅读该系列,我发现很难写出正确的操作符。来看看这篇,Observable.just()为了支持背压(译者注:例如操作符)和退订是如何做出改变的。
当然,上面那段代码是能正确运行的,至少现在看来它是OK哒,但是随着RxJava版本的不断迭代,鬼知道以后能不能。而且我也不知道类似背压和退订等操作能否安全的向下兼容。更何况,我又不是操作符开发专家。所以,我试着避免自定义操作符,除非万不得已。
这里有一种不需要自定义操作符的实现方式:
public Observable valueObservable() {
return Observable.defer(new Func0&() {
@Override public Observable call() {
return Observable.just(value);
public Observable valueObservable() {&&return Observable.defer(new Func0&() {&&&&@Override public Observable call() {&&&&&&return Observable.just(value);&&&&}&&});}
我所做的就是用defer()操作符封装原始代码,但现在的表现正是我想要的。defer()中的代码直到被订阅才会执行。我们只需要在请求数据的时候调用Observable.just()就哦了。
我更喜欢这个解决方案的原因:
比Observable.create()更简单,不再需要手动调用onCompleted()。
使用内置操作符,这种方式(可能)更得到官方的肯定。
使用defer()操作符的唯一缺点就是,每次订阅都会创建一个新的Observable对象。create()操作符则为每一个订阅者都使用同一个函数,所以,后者效率更高。一如既往地,如果有必要可以亲测性能或者尝试优化。
上面代码仅仅是为讲解所用,但是,切换到实际生产中,我们需要用BehaviorSubject替换所有代码。让我们来看一些更复杂的东西。
假设需要一个方法,首先将数据写进磁盘,然后再作为结果返回。这是一种用defer()操作符的实现:
public Observable createSomeType(final String value) {
return Observable.defer(new Func0&() {
@Override public Observable call() {
SomeType someType = new SomeType();
someType.setValue(value);
db.writeToDisk(someType);
} catch (IOException e) {
return Observable.error(e);
return Observable.just(someType);
1234567891011121314151617
public Observable createSomeType(final String value) {&&return Observable.defer(new Func0&() {&&&&@Override public Observable call() {&&&&&&&SomeType someType = new SomeType();&&&&&&someType.setValue(value);&&&&&&&try {&&&&&&&&db.writeToDisk(someType);&&&&&&} catch (IOException e) {&&&&&&&&return Observable.error(e);&&&&&&}&&&&&&&return Observable.just(someType);&&&&}&&});}
这个例子稍微复杂一些,将数据写进磁盘的同时如果抛出异常并捕获,则立即调用onError,基本的思路是相同的,那就是:在订阅发生之前,不希望执行任何代码。
其实,有很多方式可以解决上面的问题,虽然使用defer()操作符只是其中之一,但是,使用起来真的很方便。
可能感兴趣的话题
关于安卓频道
安卓频道分享Android开发文章,精选工具和安卓相关的行业动态。
新浪微博:
推荐微信号
(加好友请注明来意)
– 好的话题、有启发的回复、值得信赖的圈子
– 分享和发现有价值的内容与观点
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 翻译传播优秀的外文文章
– 国内外的精选文章
– UI,网页,交互和用户体验
– 专注iOS技术分享
– 专注Android技术分享
– JavaScript, HTML5, CSS
– 专注Java技术分享
– 专注Python技术分享
& 2017 伯乐在线有什么使用了RxJava或RxAndroid的开源项目? - 知乎981被浏览32287分享邀请回答28316 条评论分享收藏感谢收起

我要回帖

更多关于 基于rxjava2的rxbus 的文章

 

随机推荐