这里是针对特定挑战随机生成的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,依此类推。请帮帮我。
最佳答案
有两种方法可以实现此目的。第一个方法是一旦生成推入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/