0

I am not getting how to use the result of first observable in second observable.

 -> My First Observable

var uploadImgObservable = Observable.create<File> {....}

  -> My Second Observable

var thumbnailObservable =  Observable.create<Task<UploadTask.TaskSnapshot>> {...}   

Now i wanna use the result of uploadImgObservable in thumbnailObservable. I also tried to use flatmap as suggested by stackoverflow but i didnt get it .. This is how i used flatmap in my observable..

  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) {

            }
        })

As you can see after using flatmap, Observable<Task<UploadTask.TaskSnapshot>> converts to Observable<File> but i dont wanna convert the type of observable after using the result of first observable. What should i do to use the result of first observable in second observable?

Mattwalk
  • 19
  • 1
  • 1
  • 5

1 Answers1

0

The name of the flatMap has "map" in it which means it will map some value to another. But what you can do is

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

Hope you still understand Java code.

Tuby
  • 3,158
  • 2
  • 17
  • 36