Отображение определенных данных с помощью ключа в Firebase - PullRequest
0 голосов
/ 21 марта 2019

Я новичок в разработке Android и Firebase, так что это может быть простой вопрос.

Я хочу разработать приложение, которое соответствует имени в grandChild в FireBase, а затем получить данные ключавокруг этого, но проблема в том, что когда я получаю данные, он получает значение всех дочерних узлов в базе данных.

image

Вот код, который я сделал

private void searchText() {
    final String mSearch = searchBar.getText().toString();

    //return REQUIRED if the searchBar is in filled
    if (TextUtils.isEmpty(mSearch)) {
        searchBar.setError(REQUIRED);
        return;
    }


    ValueEventListener valueEventListener = mDatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            for (DataSnapshot child : dataSnapshot.getChildren()){


                for (DataSnapshot grandChild : child.getChildren()) {


                    //check if mSearch is equal any grandchild in the firebase'
                    if(grandChild.getValue().toString().equals(mSearch)){

                        TextView mText = findViewById(R.id.searchResult);
                        String string = child.getValue().toString();
                        String string2 = string.replace("{","");
                        String string3 = string2.replace("}","");
                        String string4 = string3.replace(",","\n");

                        //retrieve the data from firebase and show in TextView
                        mText.setText(string4);
                    }
                }

            }

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

    mDatabase.addValueEventListener(valueEventListener);
}

результат равен

{Message = "...", Priority = "..", name = "...", time = "... "}

но результат , который я хочу , только имя и приоритет

{Message = "..", name = ".."}

Можно ли указать маршрут получения данных?

Ответы [ 3 ]

1 голос
/ 21 марта 2019

Чтобы получить name и Message, вы можете сделать следующее:

DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Data");
databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
     if(dataSnapshot.child("name").getValue().toString().equals(mSearch)){
       String message = dataSnapshot.child("Message").getValue().toString();
        mText.setText(message);
         }
    }

@Override
public void onCancelled(DatabaseError databaseError) {
   }
});

В приведенном выше коде вы сможете получить name и message, а затем проверьте, равно ли name значению, записанному в строке поиска.После этого вы можете присвоить message TextView

1 голос
/ 28 марта 2019

Вы можете сделать запрос через своего внучатого ребенка.Предположим, вы хотите выполнить поиск по name из вашей базы данных.Для этого следуйте приведенному ниже коду

        DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Data");

        Query query = databaseReference.orderByChild("name")
             .startAt(mSearchText)
             .endAt(mSearchText+"\uf8ff");

        query.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {

                    for (DataSnapshot data:dataSnapshot.getChildren()){

                         String name = data.child("name").getValue().toString();
                         String priority = data.child("Priority").getValue().toString();

                    }

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
1 голос
/ 21 марта 2019

Почему бы вам сначала не проанализировать JSON в объект, а затем использовать только необходимые параметры, которые вам нужны.Для разбора вы можете использовать библиотеку SimpleJSON.

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