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

DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference().child("Challenge");
                databaseReference.addChildEventListener(new ChildEventListener() {
                    @Override
                    public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                        String key = dataSnapshot.getKey();


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

java - 如何仅检索一个pushId-LMLPHP

最佳答案

有两种方法可以实现此目的。第一个方法是一旦生成推入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(/* ... */);

关于java - 如何仅检索一个pushId,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51022849/

10-08 20:53