【问题标题】:Firebase Android SearchView by valuesFirebase Android SearchView 按值
【发布时间】:2017-02-19 16:01:31
【问题描述】:

我一直在搜索如何通过 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;
                }
            });

我也用过:

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

但我不能,所以请任何人给我完全正确的答案


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

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

【问题讨论】:

  • 你能帮我吗,如何在使用 FirebaseRecyclerAdapter 时应用搜索过滤器?

标签: android firebase firebase-realtime-database searchview


【解决方案1】:

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

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

                }
            });

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

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

【讨论】:

  • 我不太明白,请你解释一下,因为我不知道在onChildAdded方法中做什么..
  • 你想要特定用户的数据,对吧?在onChildAdded metod 中,您要查找的用户的信息会以dataSnapshot 的形式返回给您。将它投射到你的模态并做你想做的@7uthaifah
  • 我已经编辑了我的问题,所以如果方法正确,请检查我对小鸡做了什么
  • 感谢 AtaerCaner 我终于解决了...非常感谢
猜你喜欢
  • 2017-07-19
  • 1970-01-01
  • 1970-01-01
  • 2013-01-28
  • 1970-01-01
  • 1970-01-01
  • 2017-06-01
  • 1970-01-01
  • 2012-12-09
相关资源
最近更新 更多