【发布时间】:2018-06-16 19:02:56
【问题描述】:
我不知道如何在第二个 observable 中使用第一个 observable 的结果。
-> My First Observable
var uploadImgObservable = Observable.create<File> {....}
-> My Second Observable
var thumbnailObservable = Observable.create<Task<UploadTask.TaskSnapshot>> {...}
现在我想在 thumbnailObservable 中使用 uploadImgObservable 的结果。 我也尝试按照stackoverflow的建议使用flatmap,但我没有得到它.. 这就是我在 observable 中使用 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> 但我不想在使用第一个 observable 的结果后转换 observable 的类型。
我应该怎么做才能在第二个 observable 中使用第一个 observable 的结果?
【问题讨论】:
标签: android kotlin observable rx-java2 subscriber