gpt4 book ai didi

android - Firebase 数据库监听器检索到错误信息

转载 作者:行者123 更新时间:2023-11-30 00:46:19 25 4
gpt4 key购买 nike

我正在向我的数据库中的一个节点添加一个监听器,如下所示:

ref = myDB.getReference("testNode/" + uID);

...


ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot singleSnapshot : dataSnapshot.getChildren()){
Log.d("PROFILE", singleSnapshot.getKey());
}
}

@Override
public void onCancelled(DatabaseError databaseError) {}
});

这是我的数据库结构:

   "testNode" : {
"ffggg@gmailcom" : {
"kcd8huka0bha6md22nh1k5enj0" : 1484814690039,
"vd4vk67n2gb7qgpol0jp8gee62" : 1484814727049
},
"test22@gmailcom" : {
"8o93lpc5clhrsrst852nfm2g75" : 1484815514788,
"a18g2u5h525nqthpqsn6askp75" : 1484814852458
}
}

上面可以看到我有一个Log用于测试,Log打印如下:

01-19 08:44:57.547 17531-17531/com.firebase.android D/PROFILE: ffggg@gmailcom 01-19 08:44:57.547 17531-17531/com.firebase.android D/PROFILE: test22@gmailcom 01-19 08:45:15.446 17531-17531/com.firebase.android D/PROFILE: 8o93lpc5clhrsrst852nfm2g75 01-19 08:45:15.446 17531-17531/com.firebase.android D/PROFILE: a18g2u5h525nqthpqsn6askp75 01-19 08:45:15.448 17531-17531/com.firebase.android D/PROFILE: ffggg@gmailcom 01-19 08:45:15.449 17531-17531/com.firebase.android D/PROFILE: test22@gmailcom 01-19 08:45:15.587 17531-17531/com.firebase.android D/PROFILE: 8o93lpc5clhrsrst852nfm2g75 01-19 08:45:15.587 17531-17531/com.firebase.android D/PROFILE: a18g2u5h525nqthpqsn6askp75 01-19 08:45:15.588 17531-17531/com.firebase.android D/PROFILE: ffggg@gmailcom 01-19 08:45:15.588 17531-17531/com.firebase.android D/PROFILE: test22@gmailcom

现在假设 uID 是 test22@gmailcom(并且我检查过字符串不为 null 或空)我应该只得到 test22@gmailcom 的 child 。然而在这里我得到了所有节点在 ref 下(但不是他们的 child ,除非节点是 uID)。我不想要这个,因为如果我有成千上万条记录,我会下载很多不必要的数据。

我是做错了什么还是 Listners 是由 firebase 实现的?

更新 1

当我从应用程序抽屉中打开应用程序时,它将获得我想要的节点的正确子节点。但是,当我转到此 Activity 中的另一个 Activity 时,我将一个子节点添加到我在另一个类中监听的节点,然后返回到监听该节点的类,我得到了奇怪的输出。

这是我添加到节点的其他 Activity 的代码:

pullNewImage = myDB.getReference("testNode");
pullNewImage.child(uID).child(randomName).setValue(ServerValue.TIMESTAMP);

更新 2

我更新的监听器代码:

 //global var

ValueEventListener profileListener = null;

//....

profileListener = ref.child(userEmail).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot singleSnapshot : dataSnapshot.getChildren()){
Log.d("PROFILE", singleSnapshot.getKey());
}
}

@Override
public void onCancelled(DatabaseError databaseError) {}
});


//...
@Override
public void onStop() {
super.onStop();
if (mAuthListener != null) {
auth.removeAuthStateListener(mAuthListener);
}
if(profileListener != null)
ref.removeEventListener(profileListener);

}

最佳答案

使用 ref = myDB.getReference("testNode").child(uID);

编辑:

既然你说问题是当你改变 Activity 时,你可能不会停止听众。

添加一个 ValueEventListener:ValueEventListener profileListener = null; 并删除线程。然后将您的监听器设置为 ValueEventListener:

profileListener = ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot singleSnapshot : dataSnapshot.getChildren()){
Log.d("PROFILE", singleSnapshot.getKey());
}
}

@Override
public void onCancelled(DatabaseError databaseError) {}
});

然后覆盖onStop()方法:

@Override
public void onStop() {
super.onStop();

if(profileListener != null)
ref.removeEventListener(profileListener);
}

编辑 2:

仍然不确定为什么上面的方法不起作用,但你也可以试一试:

以下假设 DatabaseReference ref = FirebaseDatabase.getInstance().getReference("testNode");

Query profileQ = ref.orderByKey().equalTo(userEmail);
profileQ.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot singleSnapshot : dataSnapshot.getChildren()){
Log.d("PROFILE", singleSnapshot.getKey());
}
}

@Override
public void onCancelled(DatabaseError databaseError) {}
});

如果可行,您必须将 ValueEventListener 替换为 Queue(Queue 继承自 ValueEventListener)。由于它处理的是 UID,因此它只会返回一个......但如果这有效而其他方法无效,我会感到惊讶。

关于android - Firebase 数据库监听器检索到错误信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41737490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com