Obtenha bitmap de url com outras chamadas Api paralelamente usando glide e Rxjava no Android

Sep 29 2020

Estou fazendo duas chamadas de API paralelas da seguinte maneira.

Single.zip(API1.subscribeOn(Schedulers.io()),
                API2.subscribeOn(Schedulers.io()), Bifunction())).subscribe();

Gostaria de carregar um bitmap de um URL e enviar de volta o bitmap. Algo assim

Single.zip(API1.subscribeOn(Schedulers.io()),
                    API2.subscribeOn(Schedulers.io()), getImageBitmap(), Function3())).subscribe();

No método getImageBitmap, estou tentando retornar Single<Bitmap>. Algo assim.

Single.create(new SingleOnSubscribe<Bitmap>() {
            @Override
            public void subscribe(final SingleEmitter<Bitmap> emitter) throws Exception {
                Glide.with(context).asBitmap().load(url)
                        .diskCacheStrategy(DiskCacheStrategy.NONE)
                        .error(R.drawable.ic_login_error).addListener(new RequestListener<Bitmap>() {
                    @Override
                    public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Bitmap> target, boolean isFirstResource) {
                        emitter.onSuccess(null);
                        return false;
                    }

                    @Override
                    public boolean onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) {
                        emitter.onSuccess(resource);
                        return false;
                    }
                });
            }
        }).subscribeOn(AndroidSchedulers.mainThread());

Eu não estou obtendo nenhum resultado com isso. Como obter bitmap do Glide na abordagem a seguir?

Respostas

abhishekmaharajpet Sep 29 2020 at 13:24

Ao carregar a imagem do Glide, devemos chamar o .submit()método ou .into(...)para obter o bitmap ou carregar a imagem com sucesso.