有什么办法可以通过转换进行此通话吗?

时间:2018-10-03 13:49:38

标签: android firebase firebase-realtime-database firebase-storage

我的要求是从Firebase存储中下载1000多个存储文件,这是我正在尝试做的事情,我尚未对其进行测试,但我认为由于下载方法是异步的,因此for循环可能比该文件下载完成更重要。看看

 private void fetchUserLinks(){

        mDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                for(DataSnapshot snapshot : dataSnapshot.getChildren()){
                    String downloadURL= snapshot.child("URL_Files").child("URL_file_en").getValue(String.class);
                    downloadFile(downloadURL);


                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }


    private void downloadFile(String downloadURL) {
        FirebaseStorage storage = FirebaseStorage.getInstance();
        StorageReference storageRef = storage.getReferenceFromUrl(downloadURL);

        File rootPath = new File(Environment.getExternalStorageDirectory(), "file_name");
        if(!rootPath.exists()) {
            rootPath.mkdirs();
        }

        final File localFile = new File(rootPath,"imageName.txt");

        storageRef.getFile(localFile).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
                Log.e("firebase ",";local tem file created  created " +localFile.toString());

            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception exception) {
                Log.e("firebase ",";local tem file not created  created " +exception.toString());
            }
        });
    }

现在,我认为第一个循环将获取第一个孩子的文件下载URL,将其从参数发送到downloadFile方法,但是当downloadFile方法正在下载或异步执行该任务时,for循环将获取下一个链接并可能在完成获取和下载第一个方法之前将其发送给该方法

所以我的问题是,有什么办法可以进行事务处理,直到该文件下载完毕然后取回另一个文件?使用接口是一种好方法吗?最好的方法是什么?

谢谢

0 个答案:

没有答案