#android #firebase #firebase-storage
#Android #firebase #firebase-хранилище
Вопрос:
У меня есть папка с именем «Notes» в моем хранилище Firebase, и в ней есть изображения с именами от 1 до 10.
1.jpg,2.jpg,3.jpg ….
Я хочу получить URL-адрес для загрузки их изображений и хочу отобразить его в моем viewpager.
В настоящее время я использую этот код.
final StorageReference okref = mStorageRef.child("Notes/");
okref.listAll().addOnSuccessListener(new OnSuccessListener<ListResult>() {
@Override
public void onSuccess(ListResult listResult) {
for (StorageReference item : listResult.getItems()) {
item.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
String URI = uri.toString();
arrayList.add(URI);
Toast.makeText(context, "Taks copmpleted",Toast.LENGTH_SHORT).show();
}
});
}
}
});
Но, используя это, я получаю изображения в случайном порядке.Я хочу, чтобы порядок был 1.jpg затем 2.jpg затем 3.jpg…in мой просмотрщик
Я использую viewpager для ImageSlider.
Ответ №1:
getDownloadUrl()
является асинхронным и не дает вам гарантии, в каком порядке он будет генерировать результат по сравнению с другими асинхронными вызовами getDownloadUrl()
. Если вам нужен порядок для результатов, вам придется написать код, чтобы убедиться, что результаты имеют тот порядок, который вы ожидаете. Вы могли бы сделать это, выполнив итерацию с for
циклом с целочисленным индексом и заполнив свой массив этим индексом. Общая форма этого решения может выглядеть следующим образом (это псевдокод и не будет компилироваться):
items = listResult.getItems();
for (int i = 0; i < item.size(); i ) {
item = items[i];
item.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
String URI = uri.toString();
arrayList.set(i, URI);
}
});
}
Убедитесь, что целочисленный индекс используется последовательно, чтобы решить, с каким элементом выполняется работа.
Комментарии:
1. Разве это не было бы проще с оператором concat map?
2. @AdityaKurkure Я не знаю, не так ли? Если у вас есть ответ, не стесняйтесь поделиться им здесь.