Firebase Android SearchView 按值

7ut*_*fah 5 android firebase searchview firebase-realtime-database

我一直在搜索如何通过 vaule 在 firebase 中搜索,但我无法得到完整的答案,所以我现在问......

我使用了这个方法,但无法得到正确的结果:

我需要按“用户名”搜索。

这是我的数据库:

在此输入图像描述

mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
                @Override
                public boolean onQueryTextSubmit(String query) {
                    return false;
                }

                @Override
                public boolean onQueryTextChange(String newText) {

                    mQuery = mDatabase.orderByChild("Username");


                    return false;
                }
            });
Run Code Online (Sandbox Code Playgroud)

而且我也用过:

mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
                @Override
                public boolean onQueryTextSubmit(String query) {
                    return false;
                }

                @Override
                public boolean onQueryTextChange(String newText) {

                    mQuery = mDatabase.orderByChild("Username").equalTo(newText)


                    return false;
                }
            });
Run Code Online (Sandbox Code Playgroud)

但我不能,所以有人可以给我完全正确的答案吗


感谢 AtaerCaner 帮助我,也感谢你尽可能地帮助我,但我仍然没有从搜索视图中得到任何结果,所以我将给出我的类中的方法:

mDatabase.addChildEventListener(new ChildEventListener() {
                @Override
                public void onChildAdded(final DataSnapshot dataSnapshot, String s) {
                    mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
                        @Override
                        public boolean onQueryTextSubmit(String query) {

                            String A = (String) dataSnapshot.child(Post_Key).child("Username").getValue();
                            mQuery = mDatabase.orderByChild(A).equalTo(query);


                            return false;
                        }

                        @Override
                        public boolean onQueryTextChange(String newText) {
                            String A = (String) dataSnapshot.child(Post_Key).child("Username").getValue();
                            mQuery = mDatabase.orderByChild(A).equalTo(newText);
                            return false;
                        }
                    });
                }
Run Code Online (Sandbox Code Playgroud)

所以请检查方法是否正确..

Ata*_*er 1

假设我正在寻找迈克。首先,通过用户名将所有用户带入mDatabase.child("Users").orderByChild("Username"). 但我想要迈克的数据,所以我添加了.equalTo("Mike")。正如我所说,这会返回一个查询,然后设置一个.addListenerForSingleValueEvent来获取迈克的数据。我想要的信息将以可迭代对象的形式出现,其中包含此回调中的一项。然后将其投射到您的用户模式。

mDatabase.child("Users").orderByChild("Username").equalTo("Mike").addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                  User user = dataSnapshot.getChildren().iterator().next().getValue(User.class);
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
Run Code Online (Sandbox Code Playgroud)

据我在你的代码中看到的,你得到了查询,mQuery = mDatabase.orderByChild(A).equalTo(newText)但你没有用它做任何事情。

也许这个人可以帮助你 https://www.youtube.com/watch?v=3WTQZV5-roY