2017-09-08 13 views
0

Alors j'ai pensé que j'essaierais Room sur un petit projet parallèle. J'ai suivi l'exemple de Florina Muntenescu projet: android-architecture-componentsAndroid Architecture Composants Chambre ViewModel CompleteableFormAction

J'accorde une attention particulière aux classes: UserActivity.kt, UserViewModel.kt, UserDao.kt

UserViewModel#updateUserName() retourne une Completable et doit être souscrit au retour onComplete ou onError

Lorsque Je tente de mettre mon équivalent de viewModel.updateUserName(userName) dans une chaîne RxBindings. Si je souscris normalement Je suis passé un Disposable! dans la onNext avec une valeur de "DISPOSED" en finale .subscribe

Le problème est que ce ne sera pas émettrait Erreur et sait donc jamais s'il y a une question

Comment pourrais-je adapter le code ci-dessous afin que le .subscribe final renvoie les correct événements?

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") }) 

Merci à l'avance

M.

Répondre

0

Tourner cette

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

Pour ce

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

Cela a fonctionné à merveille! – Mannox

+0

Je ne savais pas de cet opérateur, j'ai commencé à écrire quelque chose comme:. '.flatMap ({nom -> var res = Observable.empty () vM updateUserName (nom) .subscribe ({ res = Observable .just ("succès") }, {error -> res = Observable.error (erreur) }) résultat}) ' – Mannox