如何仅检索一个pushId

时间:2018-06-25 11:52:43

标签: java android firebase firebase-realtime-database

在这里,针对特定挑战随机生成的pushId,其中接收方和发送方都有UID。我现在要从一个Activity生成这个pushId,我想从其他一些类或片段中检索这个pushId。我像这样使用Msg_Begin来检索pushId,以便可以获取特定用户的数据:

Msg_End

虽然使用此方法,但给了我pushId,但问题是它正在检索“挑战”节点中存在的所有pushId,但我只想检索单个pushId wrt挑战。有什么办法可以让我仅检索一个pushId,而不是像Challenge1那样,我只想要1st pushId,而Challenge2是2nd pushId,依此类推。请帮帮我。

enter image description here

3 个答案:

答案 0 :(得分:1)

如果要获取第一个pushid,则需要使用addListenerForSingleValueEvent和查询示例orderByChild

 DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Challenge");

reference.orderByChild("timeChallengeMinute").equalTo("58").addListenerForSingleValueEvent(new ValueEventListener() {
 @Override
public void onDataChange(DataSnapshot dataSnapshot) {
   for(DataSnapshot datas: dataSnapshot.getChildren()){
        String keys=datas.getKey();
     }
  }
@Override
 public void onCancelled(DatabaseError databaseError) {
   }
 });

addListenerForSingleValueEvent将读取一次数据,当您使用类似orderByChild的查询时,您将能够获取相关数据。上面将检索pushid where timeChallengeMinute ="58"

答案 1 :(得分:1)

有两种方法可以实现此目的。第一个方法是一旦生成推入ID,就将其存储起来,以后再在您的参考中需要时使用它。因此,在向数据库中添加Challange对象时,请使用以下代码行:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference challangeRef = rootRef.child("Challange");
String key = challangeRef.push().getKey();
challangeRef.child(key).setValue(yourChallangeObject);

一旦生成此key,您就可以在活动中随时使用它。

正如@PeterHaddad在回答中提到的那样,另一种方法是使用Query。因此,您必须在每个挑战对象下添加一个fixed属性,以便可以根据它查询数据库。我建议您添加创建挑战的用户的id。在这种情况下,查询应如下所示:

Query query = challangeRef.orderByChild("uid").equalTo(uid).addListenerForSingleValueEvent(/* ... */);

答案 2 :(得分:0)

要做到这一点,请先参考“挑战”,然后遍历该特定节点内的所有子代,然后使用getKey()

检索每个子代的密钥。
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference().child("Challenge");
                databaseReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot snapshot : dataSnapshot.getChildren()){

          String pushid = snapshot.getKey();


 }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Toast.makeText(getApplicationContext(), databaseError.getMessage(), Toast.LENGTH_SHORT).show();

        }
    });