: Ich bin in rxjava, also bitte nicht streng sein ...Benutzerdefinierte rx Func1 für Retrofit-Response-Code Handhabung
Ich habe Anfrage Läuse nächste:
Observable<Login>login(String l, String p){
return api.loginUser(l,p)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.flatMap(new Func1<Response<Login>, Observable<? extends Login>>() {
@Override
public Observable<? extends Login> call(Response<Login> r) {
switch (r.code()){
case 200:
requestOk(r);
break;
case 202:
//need to Repeat
login.timeout(2000,TimeUnit.Milliseconds);
break;
default:
//
}
}
});
}
Observable<Login> requestOk(final Response<Login> r){
return Observable.create(new Observable.OnSubscribe<Login>(){
@Override
public void call(Subscriber<? super Login> subscriber) {
if (subscriber.isUnsubscribed()) return;
subscriber.onNext(r.body());
subscriber.onCompleted();
}
});
}
Es funktioniert ok. Aber es wird viele andere Anfragen geben, bei denen ich im Falle einer Wiederholung den Anforderungscode überprüfen muss. Ich habe versucht, benutzerdefinierte Func1 erstellen
So - universell für alle Anfrage:
private <T>Func1<? super Response<T>, ? extends Observable<? extends T>> customFunc(final Observable<T> o) {
return new Func1<Response<T>, Observable<? extends T>>() {
@Override
public Observable<? extends T> call(Response<T> r) {
switch (r.code()){
case 200:
//
break;
case 202:
//need to Repeat
return o.timeout(2000,TimeUnit.Milliseconds);
break;
default:
//
}
};
};
}
ich stecken bin mit Strom beobachtbar von Login beobachtbaren in customFunc setzen.
Ich glaube, es muss einen anderen, einfacheren und korrekten Weg geben, wie man das macht. Wir freuen uns über jede Hilfe!