如何在外部调用私有类的属性?

时间:2018-12-18 03:30:26

标签: java android firebase firebase-storage

我正在制作一个Android应用程序,并试图获取存储在Firebase存储中的图像的DownloadURL,这是我的功能:

功能:

if(imageUri != null){
    StorageReference fileReference = storageReference.child(System.currentTimeMillis()+"."+getFileExtension(imageUri));
    fileReference.putFile(imageUri).continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>(){
        @Override
        public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception{
            if(!task.isSuccessful()){
                throw task.getException();
            }
            return storageReference.getDownloadUrl();
         }
    }).addOnCompleteListener(new OnCompleteListener<Uri>(){
        @Override
        public void onComplete(@NonNull Task<Uri> task){
            if(task.isSuccessful()){
                Uri downloadUri = task.getResult();
                u.setImageURL(downloadUri.toString());
                Toast.makeText(TelaRegistro.this, u.getImageURL(), Toast.LENGTH_LONG).show();
            }else{
                u.setImageURL("Sem imagem!");
            }
        }
    });
}else{
    u.setImageURL("Sem imagem!");
}

问题:

问题在于,当我在下面的行中调用该方法时,它带有值。

Uri downloadUri = task.getResult();
u.setImageURL(downloadUri.toString());
Toast.makeText(TelaRegistro.this, u.getImageURL(), Toast.LENGTH_LONG).show();

但是,当我再次尝试调用Get时,它将返回空值,如下面的行所示。

Toast.makeText(TelaRegistro.this, u.getImageURL(), Toast.LENGTH_LONG).show();

我是一名初学者程序员,并且我一直在尝试解决这一问题,但我不知道该怎么办。你能帮我吗?

1 个答案:

答案 0 :(得分:0)

相对于downloadURl()(不是类的属性),我没有完全理解私有类的含义,也没有从私有类之外获得价值。

但是我从您的问题中了解到的是,您想检索图像链接的值,而不是现在获取它的位置。

您可以在该位置再次复制此代码,因为Firebase调用是异步的,因此在eventListener之外,您可能会获得用于存储从Firebase检索到的值的变量的空值。

在此处详细了解Firebase的异步行为。

Instance 1

Instance 2