无法将 getDownloadUrl() 的响应保存到变量 [重复]

Posted

技术标签:

【中文标题】无法将 getDownloadUrl() 的响应保存到变量 [重复]【英文标题】:Can't save response of getDownloadUrl() to variable [duplicate] 【发布时间】:2019-01-30 13:16:22 【问题描述】:

这个方法应该返回downloadUrl,但一直返回null,奇怪的是,我可以在日志中看到URL

private String profileUrlPath(byte[] profile)

    mStorageReference.child("card_profile").child(userId+".jpg").putBytes(profile).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() 
        @Override
        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) 
            profilepathref.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() 
                @Override
                public void onSuccess(Uri uri) 
                    if(uri != null)
                        profileUrl = uri.toString();
                        Log.d(TAG, "profile image Url: " + profileUrl);
                    


                
            );

        
    );

    return profileUrl;


【问题讨论】:

请检查副本以了解为什么会出现这种行为以及如何使用自定义回调来解决此问题。 【参考方案1】:

您在异步任务上注册了一个成功处理程序。无法保证profileUrl = uri.toString(); 行何时执行。

很有可能,不是在从profileUrlPath返回之前。

此外,可能存在并发问题。

【讨论】:

【参考方案2】:

这样做

 private String profileUrlPath(byte[] profile)

        mStorageReference.child("card_profile").child(userId+".jpg").putBytes(profile).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() 
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) 
                profilepathref.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() 
                    @Override
                    public void onSuccess(Uri uri) 
                        if(uri != null)
                            profileUrl = uri.toString();
                            Log.d(TAG, "profile image Url: " + profileUrl);
                             return profileUrl;
                        


                    
                );

            
        );

        return null;

    

【讨论】:

不解释,为什么为空

以上是关于无法将 getDownloadUrl() 的响应保存到变量 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

无法使用从 getDownloadUrl 下载的 Firestore 存储 URL 作为图像 src

在回调中在firebase上上传两个文件但无法获取两个文件的getDownloadUrl

Flutter : getDownloadUrl (firebase 存储)

Flutter Firestorage getDownloadUrl() 返回 NoSuchMethodError

如何从 getDownloadURL() 获取 url

getDownloadURL 的 Firebase 存储句柄错误