美文网首页
android使用glide获取缓存图片的文件路径

android使用glide获取缓存图片的文件路径

作者: 大胡子的机器人 | 来源:发表于2019-04-08 18:19 被阅读0次

使用到的技术:
rxjava:可以用新开线程代替即可。我的主要目的是方便切换线程
glide:图片下载

使用场景:我的表情包是从接口获取的,但是在发送大表情的时候,融云需要接口参数中必须提供本地文件的Uri,因此需要将该图的缓存路径找出来,并转为Uri。

注意事项:
Flowable的.subscribeOn(Schedulers.newThread())和observeOn(AndroidSchedulers.mainThread())方法,observeOn观察者是在主线程,请求网络下载是在子线程。

Disposable disposable = Flowable.create(new FlowableOnSubscribe<File>() {
        @Override
        public void subscribe(FlowableEmitter<File> emitter) throws Exception {
            try {
                FutureTarget<File> target = Glide.with(context.getApplicationContext())
                        .downloadOnly()
                        .load(emoji.getUrl())
                        .submit(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL);
                File imageFile = target.get();
                emitter.onNext(imageFile);
            } catch (ExecutionException e) {
                e.printStackTrace();
                emitter.onComplete();
            } catch (InterruptedException e) {
                e.printStackTrace();
                emitter.onComplete();
            }
        }
    }, BackpressureStrategy.BUFFER)
            .subscribeOn(Schedulers.newThread())//指定在子线程中执行下载/取缓存图片路径
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Consumer<File>() {
                @Override
                public void accept(File file) throws Exception {
                    Uri remoteUri = Uri.parse(emoji.getUrl());
                    Uri localUri = Uri.fromFile(file);
                    ImageMessage imageMessage = ImageMessage.obtain(remoteUri, localUri);
                    RongIMClient.getInstance().sendImageMessage(Conversation.ConversationType.PRIVATE, String.valueOf(mTargetUser.getUserId()),
                            imageMessage, "", "", new RongIMClient.SendImageMessageCallback() {
                                @Override
                                public void onAttached(Message message) {

                                }

                                @Override
                                public void onError(Message message, RongIMClient.ErrorCode errorCode) {

                                }

                                @Override
                                public void onSuccess(Message message) {
                                    Log.i(TAG, "发送成功,图片为:remoteUri=" + remoteUri + ";\nlocalUri="+localUri);
                                   
                                }

                                @Override
                                public void onProgress(Message message, int i) {

                                }
                            });
                }
            });

相关文章

网友评论

      本文标题:android使用glide获取缓存图片的文件路径

      本文链接:https://www.haomeiwen.com/subject/zdbpiqtx.html