2016-08-04 18 views
1

Was ist der richtige RxJava-Operator für das folgende Szenario:Was ist der richtige RxJava-Operator, um dies zu tun?

Ich möchte überprüfen, ob ich ein Token gespeichert habe, wenn es nicht aus dem Netzwerk abrufen und verwenden Sie es für eine andere Netzwerkanforderung.

Ich denke, es sollte mit and/then/when oder mit einer Kombination von filter und flatMap getan werden, aber nicht sicher, wie.

+0

Beachten Sie auch, dass 'cache' kann für das Caching von einem Netzwerk hilfreich sein angefordert beobachtbar Beispiel. –

Antwort

2

Es gibt viele Möglichkeiten, dies zu lösen. Eine weitere allgemeine Lösung wäre Observable.concat.

// Our sources (left as an exercise for the reader) 
Observable<Data> memory = ...; 
Observable<Data> disk = ...; 
Observable<Data> network = ...; 

// Retrieve the first source with data 
Observable<Data> source = Observable 
    .concat(memory, disk, network) 
    .first(); 

Sie benötigen zwei Observables für Ihren Fall. Wenn das Token im lokalen Speicher vorhanden ist, wird concat das Netzwerk-Observable nicht abonnieren. Weitere Informationen im Blogpost.

Codebeispiel von this blog post.

1

Ich weiß nicht, ob dies ist, was für Sie interessanten, aber das sollte ziemlich einfach sein, strukturiert

Observable.just(getToken()) 
     .filter(token->Strings.isNullOrEmpty(token)) 
     .map(this::findNewToken) 
     .cache() 
     .subscribe(token -> println("Your new Token") 
Verwandte Themen