Questions tagged «rx-java»

RxJava – JVM的Reactive Extensions –一个库,用于使用Java VM的可观察序列组成异步和基于事件的程序。

9
什么时候应该使用RxJava Observable,什么时候应该在Android上使用简单的Callback?
我正在为我的应用程序联网。因此,我决定尝试使用Square的Retrofit。我看到他们支持简单Callback @GET("/user/{id}/photo") void getUserPhoto(@Path("id") int id, Callback<Photo> cb); 和RxJava的 Observable @GET("/user/{id}/photo") Observable<Photo> getUserPhoto(@Path("id") int id); 乍一看,两者看起来很相似,但是当涉及到实现时,就会变得很有趣... 虽然使用简单的回调实现看起来类似于: api.getUserPhoto(photoId, new Callback<Photo>() { @Override public void onSuccess() { } }); 这非常简单明了。并Observable很快变得冗长而复杂。 public Observable<Photo> getUserPhoto(final int photoId) { return Observable.create(new Observable.OnSubscribeFunc<Photo>() { @Override public Subscription onSubscribe(Observer<? super Photo> observer) { try { observer.onNext(api.getUserPhoto(photoId)); …

3
RxJava调度程序的用例
在RxJava中,有5种不同的调度程序可供选择: Immediate():创建并返回一个Scheduler,该Scheduler立即在当前线程上执行工作。 trampoline():创建并返回一个调度程序,该调度程序在当前工作完成后将要在当前线程上执行的工作排队。 newThread():创建并返回一个Scheduler,该Scheduler为每个工作单元创建一个新的Thread。 Calculation():创建并返回用于计算工作的Scheduler。这可以用于事件循环,处理回调和其他计算工作。不要在此调度程序上执行IO绑定工作。使用计划程序。io()代替。 io():创建并返回用于IO绑定工作的Scheduler。该实现由Executor线程池支持,该线程池将根据需要增长。这可用于异步执行阻塞IO。不要在此调度程序上执行计算工作。使用计划程序。Calculation()代替。 问题: 前三个调度程序很容易说明。但是,我对计算和io有点困惑。 什么是“ IO绑定工作”?它用于处理流(java.io)和文件(java.nio.files)吗?它用于数据库查询吗?它是否用于下载文件或访问REST API? 如何计算()从不同newThread() ?是否所有的Calculation()调用都在单个(后台)线程上,而不是每次都在一个新的(后台)线程上? 为什么在进行IO工作时调用calculation()很糟糕? 为什么在执行计算工作时调用io()不好?

2
CompletableFuture,Future和RxJava的Observable之间的区别
我想知道的区别 CompletableFuture,Future和Observable RxJava。 我所知道的都是异步的,但是 Future.get() 阻塞线程 CompletableFuture 提供回调方法 RxJava Observable--- CompletableFuture与其他好处相似(不确定) 例如:如果客户端需要进行多个服务调用,并且当我们使用Futures(Java)时Future.get()将依次执行...希望了解它在RxJava中的效果如何。 并且文档http://reactivex.io/intro.html说 使用Future来最佳地组合条件异步执行流是困难的(或者是不可能的,因为每个请求的延迟在运行时会有所不同)。当然可以这样做,但是很快就会变得复杂(因此容易出错),或者过早地在Future.get()上阻塞,这消除了异步执行的好处。 真的很想知道如何RxJava解决这个问题。我发现很难从文档中了解。

10
什么时候在RxJava中使用map vs flatMap?
什么时候在RxJava中使用mapvs ?flatMap 举例来说,假设我们要将包含JSON的文件映射到包含JSON的字符串中, 使用map,我们必须以Exception某种方式处理。但是如何? Observable.from(jsonFile).map(new Func1<File, String>() { @Override public String call(File file) { try { return new Gson().toJson(new FileReader(file), Object.class); } catch (FileNotFoundException e) { // So Exception. What to do ? } return null; // Not good :( } }); 使用flatMap,它更加冗长,但是Observables如果我们选择其他地方甚至重试,我们可以将问题转发到链的下方并处理错误。 Observable.from(jsonFile).flatMap(new Func1<File, Observable<String>>() { @Override public Observable<String> …
180 java  mapping  rx-java  flatmap 



3
可观察与可流动rxJava2
我一直在寻找新的rx java 2,但我不确定我是否已经明白了这个主意backpressure... 我知道我们所拥有的Observable并没有backpressure支持Flowable。 因此,基于例如,可以说我有flowable有interval: Flowable.interval(1, TimeUnit.MILLISECONDS, Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer<Long>() { @Override public void accept(Long aLong) throws Exception { // do smth } }); 在大约128个值之后,这将崩溃,这很明显我消耗的速度比获取项目要慢。 但是,我们有相同的 Observable Observable.interval(1, TimeUnit.MILLISECONDS, Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer<Long>() { @Override public void accept(Long aLong) throws Exception { // do smth } }); 即使我延迟使用它,它仍然完全不会崩溃。为了Flowable工作,可以说我放了一个onBackpressureDrop运算符,崩溃已经消失了,但是并不是所有值都被发出。 因此,我目前在脑海中找不到答案的基本问题是,为什么我应该关心backpressure何时可以使用Plain …
127 java  android  rx-java 


3
使用Retrofit 2.0和RxJava获取响应状态代码
我正在尝试升级到Retrofit 2.0,并在我的android项目中添加RxJava。我正在进行api调用,并希望在服务器出现错误响应的情况下检索错误代码。 Observable<MyResponseObject> apiCall(@Body body); 在RxJava调用中: myRetrofitObject.apiCall(body).subscribe(new Subscriber<MyResponseObject>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(MyResponseObject myResponseObject) { //On response from server } }); 在Retrofit 1.9中,RetrofitError仍然存在,我们可以通过执行以下操作获取状态: error.getResponse().getStatus() 如何使用RxJava使用Retrofit 2.0?

3
无法为io.reactivex.Observable创建呼叫适配器
我将发送一个简单的get方法到我的服务器(这是Rails应用),并使用RxJava和Retrofit获得结果。我所做的是: 我的界面: public interface ApiCall { String SERVICE_ENDPOINT = "https://198.50.214.15"; @GET("/api/post") io.reactivex.Observable<Post> getPost(); } 我的模型是这样的: public class Post { @SerializedName("id") private String id; @SerializedName("body") private String body; @SerializedName("title") private String title; public String getId () { return id; } public String getBody () { return body; } public String getTitle …

14
rxjava:我可以使用retry()但有延迟吗?
我在Android应用中使用rxjava异步处理网络请求。现在,我只想在经过一定时间后重试失败的网络请求。 有什么方法可以在Observable上使用retry(),但是只能在一定延迟后重试? 有没有办法让Observable知道当前正在重试(而不是第一次尝试)? 我看了看debounce()/ throttleWithTimeout(),但他们似乎在做些不同的事情。 编辑: 我想我找到了一种方法来做,但是我想对确认这是正确的方法还是对其他更好的方法感兴趣。 我正在做的是这样的:在我的Observable.OnSubscribe的call()方法中,在调用Subscribers onError()方法之前,我只是让线程休眠了所需的时间。因此,要每1000毫秒重试一次,我会执行以下操作: @Override public void call(Subscriber<? super List<ProductNode>> subscriber) { try { Log.d(TAG, "trying to load all products with pid: " + pid); subscriber.onNext(productClient.getProductNodesForParentId(pid)); subscriber.onCompleted(); } catch (Exception e) { try { Thread.sleep(1000); } catch (InterruptedException e1) { e.printStackTrace(); } subscriber.onError(e); } } …
91 rx-java 

8
合并一个Observables列表,直到所有完成为止
TL; DR 如何转换Task.whenAll(List<Task>)成RxJava? 我现有的代码使用Bolts构建了一系列异步任务,并等待所有这些任务完成后再执行其他步骤。本质上,按照Bolts站点上的示例,它会构建aList<Task>并返回一个列表,当列表中的所有任务Task完成时,将其标记为已完成。 我正在寻找替换方法Bolts,RxJava并且我假设这种方法可以构建异步任务列表(大小未知)并将它们全部包装为一个Observable,但是我不知道如何做。 我试着看merge,zip,concat等...但不能去工作的List<Observable>,我会被建立,因为他们似乎都面向工作的只有两个Observables,如果我理解正确的文档在一个时间。 我正在尝试学习RxJava,但仍然很陌生,因此,如果这是一个明显的问题或在文档中的某个地方进行了说明,请原谅我;我尝试搜寻。任何帮助将非常感激。

1
使用Rxjava Schedulers.newThread()与Schedulers.io()进行改造
什么是使用的好处Schedulers.newThread()VSSchedulers.io()在Retrofit网络请求。我已经看到了许多使用的示例io(),但是我想理解为什么。 情况示例: observable.onErrorResumeNext(refreshTokenAndRetry(observable)) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread())... 与 observable.onErrorResumeNext(refreshTokenAndRetry(observable)) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread())... 我见过的原因之一是- newThread()为每个工作单元创建一个新线程。io()将使用线程池 但是,这种说法对应用程序有什么影响?还有其他哪些方面?

4
观察者和订阅者之间有什么区别?
我试图破译以下功能: Subscription getCar(id, Observer<Car> observer) { return getCarDetails(id, new Observer<CarDetails> { @Override onNext(CarDetails details) { observer.onNext(details.getCar()); } }); } 我从http://blog.danlew.net/2014/09/15/grokking-rxjava-part-1/获得了一个很好的rxjava简介,但是它只是顺便提到了Observer,说您将在大多数情况下使用Subscriber从Observable发射到消费项目的时间。 有人可以向我解释 什么是观察者? 观察者与订户有何不同? 上面的代码段是做什么的? Javadoc使它看起来像订户。订阅者的Javadoc表示它实现了观察者和订阅。我很迷茫。
83 java  rx-java 


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.