Я пытаюсь найти в моей базе данных конкретный паб в моей базе данных Firebase, и если этот паб существует, я хочу получить все данные, прикрепленные к нему, и отобразить их в моем списке просмотра.Таким образом, в приведенном ниже примере, если пользователь вводит: «Это название нашего паба», я бы хотел, чтобы все приведенные ниже данные были добавлены в список «Напитки» (класс данных называется «Напиток»).
Вот структура базы данных:
{"Drinks" : {
"-L_JfWQv7xMQfXUvtFhH" : {
"comment" : "This is my test comment. ",
"location" : "This is our location.",
"price" : "This is our price",
"pub" : "This is our pub name.",
"rating" : "This is our rating",
"signature" : "This is my signature"
}
Как только этот результат поиска отображается в списке, я бы хотел иметь возможность щелкнуть по результату поиска и отобразить значения, сохраненные вчто выпить запись в списке.
Надеюсь, я объяснил это лучше, чем мой первоначальный вопрос.
Код, который я покажу, - это моя попытка манипулировать текущей функцией, которую я должен извлечь для всех записей в БД.
public void searchDB(){
String searchedString = searchText.toString();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
Query searchRef = rootRef.child("Drinks").orderByChild("pub").equalTo(searchedString);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.getChildren()){
CapDrink drink = ds.getValue(CapDrink.class);
drinkList.add(drink);
list.setAdapter(adapter);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
};
searchRef.addListenerForSingleValueEvent(valueEventListener);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
Intent i = new Intent(Search.this, DrinkIndexed.class);
i.putExtra("ValueKey", drinkList.get(position).getPub());
i.putExtra("ValueKey2", drinkList.get(position).getLocation());
i.putExtra("ValueKey3", drinkList.get(position).getPrice());
i.putExtra("ValueKey4", drinkList.get(position).getRating());
i.putExtra("ValueKey5", drinkList.get(position).getComment());
i.putExtra("ValueKey6", drinkList.get(position).getSignature());
startActivity(i);
}
});
}
Я ожидаю, что пользователь сможет ввести имя в текстовом представлении 'searchText' и передать это значение в запрос к БД, а затем запрос вернуть соответствующий объект