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

获取Firebase图片URL遇问题,返回com.google.android.gms.tasks.zzu@d55ef5求助

解决Firebase Storage获取图片下载URL返回对象地址的问题

你看到的com.google.android.gms.tasks.zzu@d55ef5并不是错误提示,而是Task<Uri>对象的默认字符串表示——因为getDownloadUrl()方法返回的是一个异步任务,不是直接的下载URL字符串,你直接调用toString()只会得到对象的内存地址,而非实际可用的URL。

问题根源

你的代码里这一行逻辑有误:

String urlPhoto = taskSnapshot.getMetadata().getReference().getDownloadUrl().toString();

getDownloadUrl()返回的是Task<Uri>类型,它是异步执行的,必须通过回调监听才能拿到最终的Uri结果,不能直接通过toString()获取值。

修改后的完整代码

你需要在上传成功的回调里,再给getDownloadUrl()添加一个成功监听来获取真实的下载URL,调整后的代码如下:

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1 && resultCode == RESULT_OK){
        Uri uriImagen = data.getData();
        storageReference = storage.getReference("chat_images");//El nombre de la carpeta en la que voy a guardar las imagenes
        final StorageReference photoReference = storageReference.child(uriImagen.getLastPathSegment()); //Obtenemos como un id de la imagen que la diferencia de todas las demás
        
        photoReference.putFile(uriImagen).addOnSuccessListener(this, new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                // 监听getDownloadUrl()的异步回调,获取真实URL
                taskSnapshot.getMetadata().getReference().getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                    @Override
                    public void onSuccess(Uri uri) {
                        String urlPhoto = uri.toString();
                        Log.v("Url de la foto", urlPhoto);
                        Message m = new Message(tvName.getText().toString() + " te ha enviado una foto", urlPhoto, tvName.getText().toString(), "", "2", "00:00");
                        databaseReference.push().setValue(m);
                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        // 处理获取URL失败的场景,方便排查问题
                        Log.e("获取URL失败", e.getMessage());
                    }
                });
            }
        });
    }
}

额外提示

  • Firebase Storage的核心操作都是异步的,必须通过回调处理结果,不能同步直接取值
  • 如果你的Firebase SDK版本较新,getDownloadUrl()可能已被标记为过时,推荐直接调用StorageReference.getDownloadUrl(),逻辑和上面一致,依然需要监听回调
  • 新增的失败监听可以帮你快速定位获取URL时可能出现的权限、网络等问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:00:17