【问题标题】:Query in firebase dataSnapshot returning null在firebase dataSnapshot中查询返回null
【发布时间】:2017-06-30 06:28:14
【问题描述】:

我正在使用 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();
                }`

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

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

希望它可以帮助某人:)

【问题讨论】:

  • 请添加firebaseDatabase的声明
  • 完成,感谢您的清理。

标签: android database firebase firebase-realtime-database


【解决方案1】:

小错字 -

将Users 更改为users :-)

【讨论】:

  • 感谢您的回复,但我这样做了,但仍然无法正常工作,
  • 我可以看到你循环了dataSnapShot 的孩子然后你又得到了一个甚至不存在的密钥的孩子。你到底想做什么?
  • 嘿朋友,我想检索用户搜索的值,所以如果用户搜索例如“SALMAN”,我想返回给他 SALMAN,目标是:永远的 Pase 程序员跨度>
  • 做一件事,让所有使用Query query = firebaseDatabase.child("users")的用户作为dataSnapShot。使用 for 循环构建列表并根据需要过滤列表。
  • 好主意喜欢它,试着去做没有发生任何动作我可以给你看代码吗?
【解决方案2】:

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

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

与

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

使用u小写。

希望对你有帮助。

【讨论】:

  • 感谢您的回复,但我这样做了,但仍然无法正常工作,
  • 只使用Query query = firebaseDatabase.child("users").child("7").child("name"); 看看它是否有效。只得到一个名字。
  • 嘿朋友我喜欢这个` Query query = firebaseDatabase.child("users").child("7").child("name"); ` 和 ` textView.setText(dataSnapshot.child("7").getValue(Artest.class).getName()); ` 但还是不行。
  • 这种情况下,只需要使用:Query query = firebaseDatabase.child("users").child("7"); 和textView.setText(dataSnapshot.child("name").getValue(String.cla‌​ss));就行了吗?
  • 我没有工作,我找到了另一个有效但不使用查询的解决方案,我现在要发布它
【解决方案3】:

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

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

【讨论】:

  • 嘿,朋友,我照你说的做了,但是应用程序崩溃了,
  • 你遇到了什么崩溃?
猜你喜欢
  • 1970-01-01
  • 2018-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-21
  • 2021-05-29
  • 1970-01-01
相关资源
最近更新 更多