firebase dataSnapshot中的查询返回null

时间:2017-06-30 06:28:15

标签: android database firebase firebase-realtime-database

我正在使用firebase来保存数据,我在从Firebase通过密钥返回数据时遇到了一些问题 简而言之,这是我的firebase页面:

this is my firebase page 首先我没有使用Query,它确实有效但是使用Query,它更灵活一点,所以我尝试这样做,它不起作用 所以这是我的代码,我希望你能帮助我

        firebaseDatabase = FirebaseDatabase.getInstance().getReference("Objects");

            Query query = firebaseDatabase.child("Users").child(key//key is a string value entered by the user ).orderByChild("name").equalTo(name//the name the user is searching for );

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

                    if (dataSnapshot!=null) {
                        for (DataSnapshot datasnapshot : dataSnapshot.getChildren()) {
                            if (datasnapshot!=null) {
                                textView.setText(dataSnapshot.child(key).getValue(Artest.class).getName());
                                editText.setText("");
                            }
                            Toast.makeText(SearchByKey.this, "in the for loop there was null", Toast.LENGTH_LONG).show();
                            textView2.setText("null....");
                            }

                    }
                    else{
                        Toast.makeText(SearchByKey.this, "dataSnapshot was null", Toast.LENGTH_LONG).show();
                        textView2.setText("null");
                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                    throw databaseError.toException();
                }`

此代码有效,但不涉及使用Query

String keyy= editText.getText().toString();                        
firebaseDatabase.child("users").child(keyy).addValueEventListener(new 
ValueEventListener() {
 public void onDataChange(DataSnapshot dataSnapshot) { 
   if (dataSnapshot == null ) {                               
    Toast.makeText(SearchByKey.this, "dataSnapshot was null", 
     Toast.LENGTH_LONG).show();                      }    
     if (dataSnapshot.getKey().equalsIgnoreCase(keyy)){                            
     textView.setText(dataSnapshot.getValue(Artest.class).getName());                                
     textView2.setText(dataSnapshot.getValue(Artest.class).getGoal());                                
     editText.setText("");                            }
     else {
     Toast.makeText(SearchByKey.this, "make sure you entered the right 
     key , try again ", Toast.LENGTH_LONG).show();                                
     editText.setText("");                            }                 
       }
   public void onCancelled(DatabaseError databaseError) 
     {
     }
嘿,这就是我设法解决这个问题的方法 首先,我只在钥匙上进行搜索, 我对完整用户拍了快照...... 简而言之,这是代码给我一个完美的输出:

firebaseDatabase= FirebaseDatabase.getInstance().getReference("Objects");

final String keyy= editTextart.getText().toString();
            Query query = firebaseDatabase.child("users");
            query.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    if (dataSnapshot == null) {
                        Toast.makeText(Search.this, "dataSnapshot was null", Toast.LENGTH_LONG).show();

                    } else {
                        textView.setText(dataSnapshot.child(keyy).getValue(Artest.class).getName());
                        textView2.setText(dataSnapshot.child(keyy).getValue(Artest.class).getGoal());
                        editTextart.setText("");
                    }
                }

希望它可以帮到某人:)

3 个答案:

答案 0 :(得分:0)

小错字 -

Users更改为users: - )

答案 1 :(得分:0)

您的问题是您使用的是不正确的孩子。请更改此行:

Query query = firebaseDatabase.child("Users")...

Query query = firebaseDatabase.child("users")...

使用u小写。

希望它有所帮助。

答案 2 :(得分:0)

对于您上面的特定查询(您只需要调用child(key),您只需要执行以下操作(而不是调用getChildren()

Artest artist = dataSnapshot.getValue(Artest.class);