gpt4 book ai didi

java - 按 firebase 中的孙属性过滤 [在 android 中]

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

上下文:

大家好,我目前正在从事一个由 Firebase 支持的 Android 项目。

我已经建立了一个非规范化的数据结构,通过votespolls 关联到users(多对多关系)。这是一张显示我数据库的 votes 路径的图像。结构如下:

votes -> [pollUid] -> [votePushuid] -> 投票对象

enter image description here

所以在这个例子中,我们有一个有 4 票的投票。

我想检查一下用户是否已经对民意调查进行了投票。为了做到这一点,我获取了 pollsUid,然后运行它的投票,看看是否有任何投票包含 voterUid 属性 == 到他们的用户 uid。

这是按如下方式完成的:

FirebaseHandler.getInstance().getMainDatabaseRef()
.child(FirebaseConstants.VOTES) //votes root
.child(pollKey) //polluid
.orderByChild("voterUid")
.equalTo(FirebaseHandler.getInstance().getUserUid())
.limitToFirst(1)
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(!dataSnapshot.exists()) {

如果 datasnaptshot 存在,那么我们就知道用户已经对该民意调查进行了投票,并且可以在 Java 逻辑中处理它。

问题:

在搜索特定用户对特定投票的投票时,onDataChange 收到的数据快照始终为空(即不存在)。我通过检查数据知道投票存在于数据库中,并且 userUid 通过调试是正确的。删除 equalTolimitToFirst 会毫无问题地返回投票的所有选票,因此很明显 ref 的主干是正确的。这对我来说意味着问题是由刚才提到的两种方法之一造成的。更奇怪的是,这种方法在某些时候确实有效,但在其他时候却无效。

问题:如何返回由孙属性过滤的 firebase 存储对象列表?如果这不可能,对于这个问题更合适的数据结构是什么?

进一步说明,我看到人们采用使用查询而不是数据库引用的方法。也许这可能与当前的问题有关。

最佳答案

您的查询是正确的。使用我自己的数据库运行该查询没有问题。可能是 userId 不匹配。 DatabaseReference延伸Query ,这就是您可以访问 Query 方法的原因。

另一种数据库结构是

{ "users_votes": {
"<userId>": {
"<pollId1>" : true,
"<pollId2>" : true,
"<pollId3>" : true
}
}
}

在用户投票后将值设置为该节点。

检查用户是否投票

usersVotesRef.child(FirebaseHandler.getInstance().getUserUid())
.child(pollKey).addListenerForSingleValueEvent(valueEventListener);

关于java - 按 firebase 中的孙属性过滤 [在 android 中],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38835487/

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