无法将getDownloadUrl()的响应保存到变量

时间:2018-08-24 05:30:23

标签: java firebase firebase-storage

该方法应该返回 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;

}

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

像这样

 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;

    }