タグ付けされた質問 「rx-java」

RxJava – JVMのリアクティブ拡張– JavaVMの監視可能なシーケンスを使用して非同期およびイベントベースのプログラムを作成するためのライブラリ。

9
RxJava Observableを使用する必要がある場合と、Androidで単純なコールバックを使用する場合
アプリのネットワーキングに取り組んでいます。そこで、私はSquareのレトロフィットを試すことにしました。彼らはシンプルをサポートしていることがわかります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():現在のスレッドですぐに作業を実行するスケジューラを作成して返します。 trampoline():現在の作業が完了した後に実行される現在のスレッドで作業をキューに入れるスケジューラを作成して返します。 newThread():作業単位ごとに新しいスレッドを作成するスケジューラを作成して返します。 Calculation():計算作業を目的としたスケジューラを作成して返します。これは、イベントループ、コールバックの処理、およびその他の計算作業に使用できます。このスケジューラでIOバインド作業を実行しないでください。スケジューラを使用します。代わりにio()。 io():IOにバインドされた作業を目的としたスケジューラを作成して返します。実装は、必要に応じて拡張されるエグゼキュータスレッドプールによってサポートされます。これは、ブロッキングIOを非同期で実行するために使用できます。このスケジューラで計算作業を実行しないでください。スケジューラを使用します。代わりに計算()。 質問: 最初の3つのスケジューラは自明です。ただし、計算とioについて少し混乱しています。 「IOバウンド作業」とは正確には何ですか?ストリーム(java.io)およびファイル(java.nio.files)の処理に使用されますか?データベースクエリに使用されますか?ファイルのダウンロードやREST APIへのアクセスに使用されますか? どのように計算は()とは異なる)newThread( ?それはすべての計算です()呼び出しが毎回新しい(バックグラウンド)スレッドではなく単一の(バックグラウンド)スレッド上にあるのですか? IO作業を行うときに計算()を呼び出すのはなぜ悪いのですか? 計算作業を行うときに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は言う Futuresを使用して条件付き非同期実行フローを最適に構成することは困難です(または各リクエストのレイテンシは実行時に変化するため不可能です)。もちろん、これは可能ですが、すぐに複雑になり(エラーが発生しやすくなる)、Future.get()で途中でブロックされ、非同期実行の利点がなくなります。 RxJavaこの問題をどのように解決するかを知りたいと本当に思っています。ドキュメントから理解するのは難しいと思いました。

10
RxJavaでmap vs flatMapを使用するのはいつですか?
RxJavaでmap vs を使用するの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 …
180 java  mapping  rx-java  flatmap 



3
観察可能なvs流動可能な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私がプレーンを使用できるのか気にすべきなObservableのbufferですか?それとも反対側からbackpressure、消費の管理と処理に有利な点は何ですか?
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()を確認しましたが、別のことをしているようです。 編集: 私はそれを行う1つの方法を見つけたと思いますが、これが正しい方法であるかどうかの確認、または他のより良い方法に興味があります。 私がやっていることは次のとおりです。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
オブザーバブルのリストを組み合わせて、すべてが完了するまで待ちます
TL; DR どのように変換するためTask.whenAll(List<Task>)にRxJava? 私の既存のコードは、Boltsを使用して非同期タスクのリストを作成し、それらのタスクがすべて完了するまで待ってから、他の手順を実行します。基本的に、Boltsサイトの例のように、リスト内のすべてのタスクが完了するList<Task>と、を構築して、Task完了としてマークされたシングルを返します。 私は交換するために探しているBoltsとRxJava、私は非同期タスクのリストを構築するこの方法を想定した(サイズは事前に知られていない)と、すべてのシングルにそれらをラップするよObservable可能ですが、私は方法がわかりません。 私は見てみましたmerge、zip、concat等...しかし、上で動作するように得ることができないList<Observable>、彼らはすべてのちょうど2つで作業に合わせたように見えるように私が構築するだろうとObservables私が正しくドキュメントを理解すれば一度に。 私は学ぼうとしていますがRxJava、まだ非常に新しいので、これが明らかな質問であるか、どこかのドキュメントで説明されている場合は、ご容赦ください。検索してみました。どんな助けでも大歓迎です。

1
Rxjava Schedulers.newThread()とSchedulers.io()による後付け
ネットワークリクエストとSchedulers.newThread()比較Schedulers.io()して使用する利点は何ですかRetrofit。を使用した例をたくさん見てきましたがio()、その理由を理解したいと思います。 状況の例: observable.onErrorResumeNext(refreshTokenAndRetry(observable)) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread())... vs observable.onErrorResumeNext(refreshTokenAndRetry(observable)) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread())... 私が見た理由の1つは- 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の良い紹介を得ましたが、オブザーバーについてのみ言及されており、ほとんどの場合サブスクライバーを使用すると述べています。 Observableから放出される消費財までの時間。 誰かが私に説明できますか オブザーバーとは何ですか? オブザーバーはサブスクライバーとどう違うのですか? 上記のコードスニペットは何をしますか? Javadocは、それをサブスクライバーのように見せました。サブスクライバーのjavadocは、オブザーバーとサブスクリプションを実装すると述べています。私は非常に混乱しています。
83 java  rx-java 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.