How to store Url into ArrayList from Firebase Storage?(如何将Firebase存储中的URL存储到ArrayList中?)
问题描述
我正在尝试将所有URL的列表从Firebase存储获取到ArrayList中。我尝试使用getDownloadUrl()方法,但ArrayList仍然为空。这是我的代码-
public class LoggedIn extends AppCompatActivity {
RecyclerView recyclerView;
ArrayList<Uri> Url=new ArrayList<>();
StorageReference storageReference= FirebaseStorage.getInstance().getReference();
int in;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_logged_in);
Bundle extras=getIntent().getExtras();
String value = extras.getString("email");
for(in=1;in<6;in++){
storageReference.child(in+".png").getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
Url.add(in,uri);
Log.d("success",String.valueOf(uri));
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d("Failed",String.valueOf(e));
}
});
}
}}
推荐答案
我猜您在执行Url.add(in,uri)
之前正在使用Url
列表。
因为getDownloadUrl()
需要调用服务器,所以它是异步处理的。这意味着您的主代码继续运行,而应用程序在后台等待下载URL。然后,一旦下载URL可用,将使用该值调用您的onSuccess
。
我将在下面链接一些类似的问题,但需要记住的重要一点是,任何需要下载URL的代码都需要在onSuccess
中,或者从那里调用。
如果要等待所有下载URL可用,可以使用Tasks.whenAllSuccess
。
Task[] tasks = new Task[6];
for(in=1;in<6;in++){
Task task = storageReference.child(in+".png").getDownloadUrl();
tasks[i] = task;
task.addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
Url.add(in,uri);
Log.d("success",String.valueOf(uri));
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d("Failed",String.valueOf(e));
}
});
}
Tasks.whenAllSuccess(tasks).addOnSuccessListener(new OnSuccessListener<List<Uri>>() {
@Override
public void onSuccess(List<Uri> results) {
... you can use `resuls` or `Url` here
}
})
另请参阅:
- How to get download url for firebase storage and update firestore document?
- Can someone help me with logic of the firebase on success listener
- getContactsFromFirebase() method return an empty list
- Setting Singleton property value in Firebase Listener
- Firebase - Android - fetchProvidersForEmail - Why are all the calls asynchronous?
- How to deal with the values taken from asynchronous methods like onComplete?
这篇关于如何将Firebase存储中的URL存储到ArrayList中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!