2017-09-08 3 views
0

Also dachte ich, ich würde Room auf einem kleinen Nebenprojekt ausprobieren. Ich folgte Florina Muntenescu des Beispielprojekt: android-architecture-componentsAndroid Architektur Komponenten Room ViewModel CompleteableFormAction

ich besonderes Augenmerk auf Klassen bezahle: UserActivity.kt, UserViewModel.kt, UserDao.kt

UserViewModel#updateUserName() gibt einen Completable und hat auf die Rückkehr onComplete oder onError

abonniert werden, wenn Ich versuche, mein Äquivalent von viewModel.updateUserName(userName) in eine RxBindings Kette zu setzen. Wenn ich ihn abonnieren normalerweise Ich bin ein Disposable! in die onNext mit einem Wert von "DISPOSED" in der letzten .subscribe

bestanden

Das Problem ist, dass dies nicht ein Fehler emittieren und somit kann nie wissen, wenn es eine ist Ausgabe

Wie könnte ich den unten stehenden Code anpassen, so dass der endgültige .subscribe die richtigen Ereignisse zurückgeben würde?

RxTextView.textChanges(editText) 
      .debounce(250L, TimeUnit.MILLISECONDS, schedulers.main) 
      .subscribeOn(schedulers.main) 
      .observeOn(schedulers.disk) 
      .map({ name -> 
       viewModel.updateUserName(name) 
         .subscribe(
           { Timber.d(“Success”) }, 
           { error -> Timber.d(error, “something went wrong”)) })      
      }) 
      .observeOn(schedulers.main) 
      .subscribe(
        { Timber.d("name changed $it}") }, 
        { Timber.e(it, "name error") }) 

Vielen Dank im Voraus

M.

Antwort

0

Schalten dieses

.map({ name -> 
     viewModel.updateUserName(name) 
       .subscribe(
        { Timber.d(“Success”) }, 
       { error -> Timber.d(error, “something went wrong”)) })      
      }) 

Zu diesem

.flatMapCompletable name -> 
      viewModel.updateUserName(name))      
+0

Das brillant gearbeitet! – Mannox

+0

ich nie von diesem Betreiber wusste, begann ich, wie etwas zu schreiben. '.flatMap ({name -> var res = Observable.empty () vM updateUserName (name) .subscribe ({ res = beobachtbare .just ("Erfolg") }, {Fehler -> Res = Observable.Fehler (Fehler) }) Ergebnis}) ' – Mannox

Verwandte Themen