使用equalTo条件在Firebase中查询不起作用

时间:2016-10-14 13:19:36

标签: android firebase firebase-realtime-database

我在Firebase中有这样的数据库结构

enter image description here

我想根据键数字搜索此结构,然后获取父键。这意味着如果我搜索 8860124421 ,那么我应该得到 -KTEtSR7chN8te1WaW-W 作为回报。

我在android中这样做 -

final String number = "8860124421";

DatabaseReference global_user_entry_ref = ApplicationContext.getGlobalDataBaseReference()
                .child("User-Entry-2").getRef();  //Reference to User-Entry-2 

Query query = global_user_entry_ref.orderByChild("number").equalTo(number);  

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

                    if(dataSnapshot != null){

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

                            String firebase_id = (String) friend.getKey();

                            Log.d("ContactSync","handle number "+firebase_id+" "+number+" "+friend);
                        }

                        Log.d("ContactSync","handle number outer "+dataSnapshot);
                        //user exist
                    }
                    else {
                        //user_does_not_exist
                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                    Log.d("ContactSync","handle number oncancel "+databaseError.getMessage());
                }
            });

但是我没有得到正确的结果, onDataChange 中的 dataSanpshot 看起来像这样 -

  

DataSnapshot {key = User-Entry-2,value = null}

但我希望使用数字键的父级获取dataSnapShot。

请帮助,提前致谢

1 个答案:

答案 0 :(得分:1)

正如@Frank van Puffelen在评论中所述,问题在于我将数字与代码中的数字与数据库中的字符串进行比较,这是不匹配的,因此解决方案是改变

final String number = "8860124421"; 

final long number = 8860124421;