Intereting Posts
Firebase-firestore не может использовать два документа Mockito never () не работает с andThen rxjava2 База данных Singleton Room в SyncAdapter для запуска LiveData Недвижимость без геттера в Котлине Не удается сохранить выбранное состояние зрения в BaseAdapter с помощью Kotlin Абстрактный метод Котлина с телом Тесты для Android выполняются без lanuching эмулятора (не отображается диалоговое окно устройства) – пустой набор тестов Две функции с различным количеством параметров типа в Котлине Kotlin getParcelableArray из комплекта намерений не может передать его пользовательскому типу Исключение при анализе выражения в AppDatabase Аргументы по умолчанию Kotlin: запретить вызовы с нулевыми аргументами Какие функции Kotlin недоступны в статически скомпилированном Groovy? Являются ли методы расширения и свойства расширения плохой практикой? Как сравнить два массива в Котлине? Realm & Kotlin: DefaultRealmModuleMediator.java -> ошибка: недостижимый оператор

Как начать второй наблюдаемый после получения результата от первого наблюдаемого в андроиде?

Я не понимаю, как использовать результат первого наблюдаемого во втором наблюдаемом.

-> My First Observable var uploadImgObservable = Observable.create<File> {....} -> My Second Observable var thumbnailObservable = Observable.create<Task<UploadTask.TaskSnapshot>> {...} 

Теперь я хочу использовать результат uploadImgObservable в thumbnailObservable. Я также попытался использовать flatmap, как было предложено stackoverflow, но я не получил его. Вот как я использовал flatmap в моем наблюдаемом ..

  Observable.create<Task<UploadTask.TaskSnapshot>> { e -> firebaseStorageReference.child("profile_images").child(current_user_uid+"_thumbnail"+ ".jpg").putFile(imageFile) .addOnCompleteListener { task: Task<UploadTask.TaskSnapshot> -> e.onNext(task) e.onComplete() } }.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .unsubscribeOn(Schedulers.io()) .flatMap(object : Function<Task<UploadTask.TaskSnapshot>,Observable<File>>{ override fun apply(t: Task<UploadTask.TaskSnapshot>): Observable<File> { var compressedImageBitmap = compress?.setMaxWidth(640) ?.setMaxHeight(480) ?.setQuality(70) ?.setCompressFormat(Bitmap.CompressFormat.WEBP) ?.setDestinationDirectoryPath(Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES).getAbsolutePath()) ?.compressToFile(actualImageFile) return Observable.just(compressedImageBitmap) } })?.subscribe(object : Observer<File>{ override fun onNext(t: File) { } override fun onError(e: Throwable) { } override fun onComplete() { } override fun onSubscribe(d: Disposable) { } }) 

Как вы можете видеть после использования flatmap, Observable<Task<UploadTask.TaskSnapshot>> преобразуется в Observable<File> но я не хочу преобразовывать тип наблюдаемого после использования результата первого наблюдаемого. Что я должен сделать, чтобы использовать результат первого наблюдаемого во втором наблюдаемом?

Название flatMap имеет в нем «карту», ​​что означает, что оно отобразит некоторое значение в другое. Но то, что вы можете сделать, это

 firstObservable.flatMap(firstObservableResult -> secondObservable .flatMap(secondObservableResult -> Observable.just(firstObservableResult))) .subscribe(firstObservableResult-> { // process request data }); 

Надеюсь, вы по-прежнему понимаете Java-код.