Мое требование состоит в том, чтобы загрузить более 1000 файлов хранилища из моего хранилища Firebase, это то, что я пытаюсь сделать, я еще не тестировал его, но я думаю, что, поскольку метод загрузки асинхронный, следующие данные изцикл 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 извлекает следующую ссылку и, возможно, отправляет ее методу до того, как она закончит извлечение и загрузку первой
Так что мой вопрос, есть ли способ совершить транзакцию, чтобы дождаться, пока этот файл не будетзакончил загрузку, а затем получил другой?Является ли использование интерфейса хорошим подходом?Каков наилучший способ сделать это?
спасибо