【问题标题】:Can't save response of getDownloadUrl() to variable [duplicate]无法将 getDownloadUrl() 的响应保存到变量 [重复]
【发布时间】: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;

}

【问题讨论】:

  • 请检查副本以了解为什么会出现这种行为以及如何使用自定义回调来解决此问题。

标签: java firebase firebase-storage


【解决方案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;
    
        }
    

    【讨论】:

    • 不解释,为什么为空
    猜你喜欢
    • 2014-11-09
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    • 2013-04-26
    • 2013-09-09
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    相关资源
    最近更新 更多