You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法结合Glide与Firebase Storage加载图片问题求助

解决方法

问题核心是异步操作的时序问题:getDownloadUrl()是异步执行的,你在调用thread.start()后立刻执行Glide加载,此时onSuccess还没触发,imgUrl还没被赋值,自然加载失败。

直接修改代码,把Glide的加载逻辑放到onSuccess回调内部,确保拿到有效链接后再执行加载:

// 无需额外开Thread,Firebase API本身就是异步的
imgRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
    @Override
    public void onSuccess(Uri uri) {
        String imgUrl = uri.toString();
        // 存入数据库
        myImg.setValue(imgUrl);
        // 拿到链接后立刻用Glide加载
        Glide.with(MainActivity.this).load(imgUrl).into(imageView);
    }
}).addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception exception) {
        System.out.println("获取图片链接失败:" + exception.getMessage());
    }
});

如果需要等待数据库写入成功后再加载,可以监听setValue的完成回调:

imgRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
    @Override
    public void onSuccess(Uri uri) {
        String imgUrl = uri.toString();
        myImg.setValue(imgUrl).addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    // 数据库写入成功后加载图片
                    Glide.with(MainActivity.this).load(imgUrl).into(imageView);
                } else {
                    System.out.println("数据库写入失败:" + task.getException().getMessage());
                }
            }
        });
    }
}).addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception exception) {
        System.out.println("获取图片链接失败:" + exception.getMessage());
    }
});

另外,Glide本身支持直接加载Uri,无需转成字符串,也可以这样写:

Glide.with(MainActivity.this).load(uri).into(imageView);

内容的提问来源于stack exchange,提问作者Kenan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 17:42:06