У меня есть элемент StorageReference, который хранит ссылку на папку из firebase, и я пропускаю oop через ее элементы, чтобы получить каждую ссылку для скачивания, но я не понимаю, почему она выполняется в таком порядке. Раньше я делал нечто подобное, и это работало, но теперь по какой-то причине я не понимаю, почему, это не работает так, как должно, и почему он так прыгает на слушателей.
private interface FirestoreCallback {
void onCallback(List<Uri> uris);
}
public ArrayList<Uri> getAllDownloadURIs(final FirestoreCallback firestoreCallback) {
StorageReference folderPath = ListVideoDates.storage.getReference((String) extra.getSerializable("folderPath"));
System.out.println("FOLDER PATH: " + folderPath);
final ArrayList<Uri> uris = new ArrayList<>();
folderPath.listAll()
.addOnSuccessListener(new OnSuccessListener<ListResult>() {
@Override
public void onSuccess(ListResult listResult) {
for (StorageReference file : listResult.getItems()) {
file.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
uris.add(uri);
System.out.println("Array inside onSucces2" + uris); // second
// here the array is printed as elements are
//inserted, but this listener is the last
//executed listener for some god damn reason
}
});
}
// firestoreCallback.onCallback(uris);
}
}).addOnSuccessListener(new OnSuccessListener<ListResult>() {
@Override
public void onSuccess(ListResult listResult) {
// firestoreCallback.onCallback(uris);
System.out.println("Array inside onSucces3" + uris); // first
}
});
Почему первый исполненный слушатель является вторым и почему тогда он переходит к «первому»? Я также попытался вставить обратные вызовы в обоих местах (прокомментировано выше), и он все еще не работает независимо от выполнения порядка слушателя, он все еще пуст, когда я пытаюсь получить доступ к нему с помощью метода ниже.
public void setAllDownloadURIs() {
getAllDownloadURIs(new FirestoreCallback() {
@Override
public void onCallback(List<Uri> uri) {
uris = new ArrayList<>(uri);
System.out.println("URIS inside onCallback: " + uris);
}
});
}
FOLDER PATH: gs://***************************
W/StorageUtil: no auth token for request
I/System.out: URI inside setAllDownloadURIs: null
W/NetworkRequest: no auth token for request
I/System.out: Array inside onSucces3[]
W/StorageUtil: no auth token for request
W/NetworkRequest: no auth token for request
W/StorageUtil: no auth token for request
W/NetworkRequest: no auth token for request
W/StorageUtil: no auth token for request
W/StorageUtil: no auth token for request
W/NetworkRequest: no auth token for request
W/NetworkRequest: no auth token for request
I/System.out: Array inside onSucces2
I/System.out: Array inside onSucces2
I/System.out: Array inside onSucces2
I/System.out: Array inside onSucces2
И здесь я получаю 4 вывода массива, поскольку в папке 4 элемента, и они печатаются, когда программа вставляет их в массив.