gpt4 book ai didi

iOS Firebase 排序和限制 - 未调用观察者

转载 作者:搜寻专家 更新时间:2023-10-31 08:06:16 25 4
gpt4 key购买 nike

这是我的数据模型。

project-foo
-posts
-KLs123412341234
key: "-KLs123412341234"
message: "free cupcakes"
time: 1467675688163
-...
key: "..."
message: "..."
time: ...

我只想获取过去 15 分钟内的帖子。我在我的 Firebase 控制台中看到 child 被添加,但问题是观察者似乎没有被调用 - “hello” 没有被打印。

我的 iOS 应用有以下代码,不会被调用:

class ViewController: UIViewController {

var ref: FIRDatabaseReference?

override func viewDidLoad() {
super.viewDidLoad()

ref = FIRDatabase.database().reference()
ref!.queryOrderedByChild("time")
.queryStartingAtValue(startTime())
.observeEventType(.ChildAdded, withBlock: { snapshot in
print("hello")
})

}
}

我的 Android 应用有以下代码,确实被调用:

Query query = mDatabase.orderByChild("time").startAt((double)startTime());
query.addChildEventListener(new PostListener(this, mMap));

class PostListener implements ChildEventListener {
public PostListener(Context context, GoogleMap map) {
...
}

@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Log.i(TAG, "hello");
...
}
}

更新:我的错误是没有意识到我已经使用路径 posts 初始化了 mDatabase(在 android 版本中)。修复只是用 FIRDatabase.database().referenceWithPath("posts") 而不是 FIRDatabase.database().reference() ref.

最佳答案

对于 JSON 结构,:-

"posts" : {
"autoID1" : {
"key" : "autoID1",
"timestamp" : 101
},
"autoID2" : {
"key" : "autoID2",
"timestamp" : 102
},
"autoID3" : {
"key" : "autoID3",
"timestamp" : 103
},
"autoID4" : {
"key" : "autoID4",
"timestamp" : 104
},
"autoID5" : {
"key" : "autoID5",
"timestamp" : 105
},
"autoID6" : {
"key" : "autoID6",
"timestamp" : 106
},
"autoID7" : {
"key" : "autoID7",
"timestamp" : 107
}
}

使用此代码:-

  FIRDatabase.database().reference().child("posts").queryOrderedByChild( "timestamp").queryStartingAtValue(101).queryEndingAtValue(103).observeEvenType(.Value, with: { (snap) in
if let snapDict = snap.value as? [String:AnyObject]{

for each in snapDict{

print(each.value)

}
}
}, withCancel: {(err) in


})

确保您的安全规则允许用户检索posts 的值

使用 .ChildAdded 只有在将子节点添加到该数据库节点时才会调用。使用 .Value 将检索时间戳在这些值之间的整个数据

现在很可能您无法从 FIRServerValue.timestamp() 获取时间戳值,因为它只是发送到 firebase 服务器以在该特定节点添加时间戳的命令.

因此,请改用自定义时间戳来存储您的时间戳,并为最终值添加 15 分钟到该时间戳。

阅读此 Manipulate NSDate

关于iOS Firebase 排序和限制 - 未调用观察者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39968795/

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