我正在制作一个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();
我是一名初学者程序员,并且我一直在尝试解决这一问题,但我不知道该怎么办。你能帮我吗?
答案 0 :(得分:0)
相对于downloadURl()
(不是类的属性),我没有完全理解私有类的含义,也没有从私有类之外获得价值。
但是我从您的问题中了解到的是,您想检索图像链接的值,而不是现在获取它的位置。
您可以在该位置再次复制此代码,因为Firebase调用是异步的,因此在eventListener
之外,您可能会获得用于存储从Firebase检索到的值的变量的空值。
在此处详细了解Firebase的异步行为。