2017-07-05 12 views
0

を完了せずに2つの観測ジップ私は2つの観測があります。そして、デバイスに接続し、それが加入者を有し、一方の接続を維持しますRxJavaは彼らに

Observable<RxBleConnection> bluetoothObservable = RxBleClient.create(getBaseContext()).getBleDevice(macAddress) 
.establishConnection(false) 

、および他の

Observable<Response> serverObservable = Observable.fromCallable(() -> callServer()) 

:最初のライブラリRxAndroidBleからです私は一緒にジップする

bluetoothObservable.zipWith(serverObservable , (rxBleConnection, s) -> { 
           Log.d(TAG, "zip done"); 
           return "mock result"; 
          }).subscribe((s) -> {}, 
            Throwable::printStackTrace); 

しかし、ジップbluetoothObservableは、スクライブされ、接続が直ちに落ちる。これらの観測値を圧縮し、bluetoothObservableを生存/購読し続けるにはどうすればよいですか?

答えて

1

代わりの.zip()あなたが使用することができます。

Observable.combineLatest(
    bluetoothObservable, 
    serverObservable, 
    (rxBleConnection, s) -> { 
    Log.d(TAG, "combined"); 
    return "mock result"; 
    } 
) 
    .subscribe(
    (s) -> {}, 
    Throwable::printStackTrace 
) 

説明:一つObservableの1の両方から出力を結合しようとしzipを。そのうちの1つが完了し、その前のすべての排出物が一致した場合、後続の排出物は使用されないので、もう1つのObservableへの購読を維持するポイントはありません。 combineLatestは、両方ともObservableからのすべての排出を、最新ののペアに結合しようとします。

+0

おかげで、私はそれを試してみると、その後はありません –

+0

を報告します、私は 'bluetoothObservable'はまだ解除 –

+0

私はまったく同じコードをチェックしているし、2可能な状況があるので、それは私の作品を取得怖いです:フローが例外を投げているか、あなた自身の 'bluetoothObservable'が完了しています。 –