Поиск Firebase по дочернему значению (имя), заполнить список совпадающих имен и добавить намерение в этот список - PullRequest
0 голосов
/ 30 марта 2019

Я пытаюсь найти в моей базе данных конкретный паб в моей базе данных 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' и передать это значение в запрос к БД, а затем запрос вернуть соответствующий объект

1 Ответ

0 голосов
/ 02 апреля 2019

Так что, очевидно, моя проблема была в смехотворно плохой Android Studio, а не в моем коде. Для любого, кто будет ссылаться на эту проблему в будущем, этот код будет запрашивать вашу базу данных Firebase, отображать соответствующую запись в просмотре списка и делать запись в этом просмотре списка кликабельной (т. Е. Есть намерение, и вы можете делать все, что захотите из этого) :

public void searchDB(){

    drinkList.clear();

    String Pub = searchText.getText().toString().toLowerCase().trim();
    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    Query searchRef = rootRef.child("Drinks").orderByChild("pub").equalTo(Pub);


    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) {

            Toast.makeText(getApplicationContext(), "There's been an error, apologies.", Toast.LENGTH_LONG).show();

        }
    };
    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);
        }
    });
}

Спасибо за все время и усилия!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...