如何将Firebase存储中的URL存储到ArrayList中?

How to store Url into ArrayList from Firebase Storage?(如何将Firebase存储中的URL存储到ArrayList中?)

本文介绍了如何将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中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:如何将Firebase存储中的URL存储到ArrayList中?

基础教程推荐