Проблема запроса базы данных Firebase в реальном времениAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Проблема запроса базы данных Firebase в реальном времени

Сообщение Anonymous »

У меня есть база данных более 800 элементов, и я хочу отфильтровать их по редкости. С «одиночной» редкостью (например, только «легендарной» редкостью) я могу легко это сделать, но проблема появляется при попытке объединить две раритеты (например, событие и базовое «Rarity»). < /P>
Это метод, который я использую: < /p>

Код: Выделить всё

 private void loadFirebaseData(String rarity1, String rarity2) {

DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Outfits");
reference.keepSynced(true);

Query query = reference.orderByChild("rarity").startAt(rarity1).endAt(rarity2);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

arrayCosmetics = new ArrayList();

for (DataSnapshot data : dataSnapshot.getChildren()) {
Cosmetics cosmetics = data.getValue(Cosmetics.class);
arrayCosmetics.add(cosmetics);
}

cosmeticsAdapter = new CosmeticsAdapter(getActivity(), arrayCosmetics);
cosmeticsAdapter.setHasStableIds(true);

recyclerView.setVisibility(View.VISIBLE);
recyclerView.setAdapter(cosmeticsAdapter);

Collections.shuffle(arrayCosmetics, new Random(3));

rootView.findViewById(R.id.progressBar).setVisibility(View.GONE);

}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
And calling it like: loadFirebaseData("basic", "event");
So the issue is that it loads me all the rarities from alphabetically "b" all the way to "e" (e.g "basic", "classic", "common", "elite", "epic") and obviously I want only "basic" and "Событие" < /p>
База данных структурирована как следующее: < /p>

Код: Выделить всё

"01" : {
"available" : "X",
"created" : "20191023",
"id" : 1,
"image" : "x",
"info" : "x",
"marketable" : true,
"name" : "xx",
"rarity" : "x",
"slot" : "xx" }

"02" : {
"available" : "x",
"created" : "20191023",
"id" : 1,
"image" : "x",
"info" : "x",
"marketable" : true,
"name" : "x",
"rarity" : "x",
"slot" : "x" }
< /code>
Правила Firebase: < /p>
 "Outfits": {
".indexOn": ["rarity"]
}
Можно достичь того, что я хочу без загрузки всей базы данных в один большой массив () ?

Код: Выделить всё

private void rarityFilter(String rarity1, String rarity2) {

ArrayList newListCosmetics = new ArrayList();

for (Cosmetics cosmetics : arrayCosmetics) {
String name = cosmetics.getRarity().toLowerCase();
if (name.contains(rarity1) || name.contains(rarity2))
newListCosmetics.add(cosmetics);
}
cosmeticsAdapter.setFilter(newListCosmetics);
}
Но разве не плохо для работы производительности загружают весь ArrayList () ?

Подробнее здесь: https://stackoverflow.com/questions/608 ... uery-issue
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»