2017-07-27 3 views
1

Ich habe eine Aufgabe, um eine Verbindung zum Remote-Service herzustellen. Wenn es nicht angeschlossen ist - starten Sie den gesamten Verbindungsvorgang, falls bereits verbunden - einfach abschließen. Zu diesem Zweck habe ich diese Methode -Wie vervollständige ich die Completable FlatMap-Kette?

Im ersten Fall, wenn der Service nicht verbunden ist - alles funktioniert gut. Aber wenn in der ersten Stufe isConnected() TRUE zurückgibt, werden alle Chain-Stalle und Completable überhaupt nicht abgeschlossen. Was kann ich tun, um die erste Stufe zu erzwingen?

+0

versuchen zurückzukehren 'Completable.complete()' statt Single.never() –

+0

Versuchte ... (Aber flatMap will Einzel zurück , nicht Completable –

Antwort

0
 

    .flatMap(isConnected -> { 
     if (isConnected) return Single.never(); 
     else return bluetoothService.isBluetoothAvailable(); 
    }) 
 

Was Sie damit gesagt haben, ist, dass, wenn isConnectedtrue ist, dann nie ein Element emittiert, wodurch diese beobachtbar wird nie enden.

Stattdessen sollten Sie Downstream einem Single of false passieren:

 

    .flatMap(isConnected -> { 
     if (isConnected) return Single.just(Boolean.FALSE); 
     else return bluetoothService.isBluetoothAvailable(); 
    }) 
    // Will continue stream if `isConnected` is true 
    .filter(isConnected -> isConnected) 
    // if `isConnected` is false, then downstream operators won't be executed 
 
+0

Diese Lösung wird BluetoothNotAvailableException auf dem zweiten Schritt der Kette verursachen, was nicht der Fall ist.Alle, die ich brauche, ist Completeable im ersten Schritt.Ich stimme zu, dass Single.never() macht nur completeable für immer ... I denke, es gibt keine Lösung "in der Kette" dafür, ich muss Abfragen neu strukturieren ... –

+0

@ EвгенийКравцов, können Sie das Observab nicht beenden le. Sie können Ihren beobachtbaren Zustand für den Zustand "isConnected" filtern(). Nach diesem Operator können Sie sicher sein, dass die Ausnahme nicht ausgelöst wird. Die Antwort wurde aktualisiert. – azizbekian

Verwandte Themen