首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >搜索整个Firebase数据库中的单个值

搜索整个Firebase数据库中的单个值
EN

Stack Overflow用户
提问于 2017-09-08 10:37:57
回答 1查看 264关注 0票数 1

我使用firebase来创建带有邮件和密码的用户,但是在注册之后,我将他们转发到一个新的活动中,以便选择需要唯一的用户名。我的想法是搜索整个DB,以查看该用户名是否已经存在。我就是这么做的,但到现在还没有运气:

代码语言:javascript
复制
submitBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d("UserName", "Click: ");

                DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference("USERS");
                mDatabase.orderByChild("username").equalTo("name1").addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        for (DataSnapshot snapshot: dataSnapshot.getChildren()) {
                            //Here you can get all data
                            Log.d("UserName", "onDataChange: "+snapshot.toString());
                        }
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });
            }
        });

我也试过这个:

代码语言:javascript
复制
submitBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d("UserName", "Click: ");

                DatabaseReference mFirebaseDatabaseReference = FirebaseDatabase.getInstance().getReference();
                Query query = mFirebaseDatabaseReference.child("USERS").orderByChild("username").equalTo("name1");

                ValueEventListener valueEventListener = new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                            //TODO get the data here
                            Log.d("UserName", "onDataChange: " + dataSnapshot.toString());
                        }

                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                };
                query.addValueEventListener(valueEventListener);

            }
        });

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-08 11:06:39

您的代码不能工作的唯一原因是"username“不是用户表的直接子表。您的直接子类将具有随机ids,您可以像这样使用ChildEventListener来迭代这些ids:

代码语言:javascript
复制
DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference("USERS");
mDatabase.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) {
         User user = dataSnapshot.getValue(User.class); // pojo
         if(user.getUsername().equals("name1") {
             // do something
         }

    }
    ...
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46114564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档