2017-06-09 6 views
0

は、それがすべてで、これは条件付き置き換えることが可能である:RxJava 2、私はここに私の条件に入れるのですか?

if (_file.exists) { 
    //rxjava post 
} 
else { 
    //another type of post 
} 

下のポストのジェネリック版:

service.setSolicitation("Berlin", getString(R.string.api_key)) 
.subscribeOn(Schedulers.io()) 
// Read results in Android Main Thread (UI) 
.observeOn(AndroidSchedulers.mainThread()) 
.subscribe(this::processError); 

私は本当に自分自身を繰り返し続けるしたくないもループ場合はそれを使用しますNULLポインタの例外を回避するためです。 rx javaに関連するファンシーオプションはありますか?

編集

だから、私は改造APIインターフェイス上の2つの観測を持っています。

@POST("solicitation/create ") 
Observable<Solicitation> createSolicitation(@Query("X-Authorization") String apiKey, @Body Solicitation solicitation); 

@Multipart 
@POST("solicitation/create") 
Observable<Solicitation> uploadFileMap(
     @Query("X-Authorization") String apiKey, 
     @PartMap() Map<String, RequestBody> partMap, 
     @Part MultipartBody.Part file); 

私は同じことには2つの観測を持っていないのはなぜ?なぜなら、ファイルが存在する場合は1つを使用し、ファイルが存在しない場合は1つを使用するからです。

したがって、条件付きif (_file.exists)で確認する必要があります。

私は、複数のif文を処理する代わりに、すべてを単純化したいと考えています。(すでにオンラインであるかどうかをチェックしてくださいだから私はifとそれはひどいです入れ子です。

+0

をあなたが避けるようにしようとしているものを私に明確ではありません。この条件は、表示されているRxJava呼び出しの例には現れません。おそらく明確にすることはできますか? –

+0

私はもう少し明確にしようと更新するつもりです、私に秒を与える。 – Rosenberg

+0

@ScottWありがとうございましたか、詳細を追加したいですか? – Rosenberg

答えて

0

があれば、他の実際を使用しますが、ただ異なる部分について:

Observable.defer(() -> 
    someCondition() 
    ? service.setSolicitation("Berlin", getString(R.string.api_key)) 
    : service.createSolicitation(....) 
) 
.subscribeOn(Schedulers.io()) 
// Read results in Android Main Thread (UI) 
.observeOn(AndroidSchedulers.mainThread()) 
.subscribe(this::processError); 
関連する問題