- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用的是后 Google I/O 2016 Firebase 数据库。
在 DatabaseReference
上,有两个类似的方法,似乎只是完成回调不同。
一个是void setValue(Object value, DatabaseReference.CompletionListener listener)
, 另一个是 Task<Void> setValue(Object value)
.
它们可以互换吗?文档对此没有任何说明,而且 Firebase Android SDK 是闭源的。
最佳答案
它们几乎可以互换。 setValue 返回的 Task 与传递的 CompletionListener 之间的主要区别在于能够避免对象泄漏。
当您将 CompletionListener 传递给 setValue 时,Firebase SDK 将无限期保留该对象引用(以及所有该对象的强引用,等等),直到数据最终写入服务器端。对于 Android 应用程序,这可能特别成问题,因为您最终可能会泄漏 Activity 引用,这是非常昂贵的。
当您使用任务时,您可以根据需要在那个中添加和删除监听器,因此如果您不再想知道写入是否成功,您可以释放以前感兴趣的对象。在 Android 中,有用于添加监听器的重载,当 Activity 停止时自动让监听器自行删除,因此您不必自己安排这样做。
借助 Tasks,您还可以安排在特定执行器上调用回调,这是将繁重的工作转移到另一个线程的便捷方式。使用 CompletionListener,您必须在回调本身中自行安排。
我有一个 four-part blog series在 Play 服务和 Java admin SDK 提供的任务上。还有formal documentation .
关于android - Firebase Android : What is the difference between getting callback from DatabaseReference's setValue via Task and DatabaseReference. CompletionListener?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42432558/
我使用的是后 Google I/O 2016 Firebase 数据库。 在 DatabaseReference 上,有两个类似的方法,似乎只是完成回调不同。 一个是void setValue(Obj
我尝试过滤 Firebase 的数据库,但出现此错误: Error:(26, 107) error: incompatible types: Query cannot be converted to
使用 Firebase 数据库时,我可以使用 DatabaseReference 对象的 push() 方法生成 key ,如下面的代码 fragment 所示: FirebaseDatabase.g
我正在尝试通过获取数据库引用来向 firebase 数据库添加一些信息,但它给出了以下错误: Caused by: java.lang.NoSuchMethodError: 类 Lcom/google
我的实时数据库 (firebase) 中有不同城市的位置。 以下是我的数据库结构。 但是根据firebase教程,我尝试了以下代码来获取数据 cityA.queryOrdered(byChild: "
假设我有这个 firebase JSON 结构: 我需要得到属性“from”等于“this”的所有问题。 我知道我可以使用 Volley 创建一个 StringRequest 并从我的 questio
不是 Android 问题。 用于查询数据库的方法: private void db() throws FileNotFoundException, IOException { FileInp
我正在尝试从 AndroidStudio 应用将数据写入 Firebase 的实时数据库。我必须在不同的 child 中编写一些Java HashMap,但我注意到当HashMap的大小大于120k时
如果我有一个DatabaseReference,从中获取一个Query,然后向那个Query 添加一个监听器,我是否必须调用Query 引用上的 removeEventListener,或者我可以将其
我不太明白什么时候应该使用DatabaseReference,什么时候应该使用DataSnapshot。 在我的应用程序中,我似乎在没有真正区别的情况下使用它们(可能除了写入 Firebase 之外,
嘿,我需要在某个时候移除这个监听器,还是它会自行移除?我在我的 Activity 中的一个 fragment 中调用了这个,用户可以在不破坏这个 View 的情况下转到另一个 View 。因此不确定我
我使用 firebase 作为我的应用程序的后端。首先,我使用 Firebase 实例将对象保存到 firbase 数据库,这工作得很好,但我必须更改实现以从保存的对象中获取 key 以供我进一步实现
我目前正在 Android 上开发一个研究所级别的聊天消息传递应用程序。我使用 Firebase 作为我的云服务器。目前,我在 MainActivity 的以下行中遇到 DatabaseReferen
我得到了Incompatible types: String cannot be converted to DatabaseReference onItemClick 中的错误用于获取 Firebas
在 Firebase 太棒了中,您可以执行此操作 var r1: DatabaseReference? = nil 然后是这个 r1 = Database.database().ref
我使用 Firebase 实时数据库并希望在事务处理中为我的 vector 添加值,即获取 vector 、更新、设置 vector 。 我写了一些简单的 labda,但一直坚持这些代码无法编译。
不好意思问了个奇怪的问题 昨天我不得不更新我的 firebase pod,在那之前一切都很好,但在那之后,我再也无法检索数据了 这是我的代码 // let userID = FIRAuth.
好的,欢迎对标题提出建议,但我想不出更好的。 但这是我想做的: 我正在尝试为 Flutter 创建一个 GeoFire 插件。 GeoFire 需要对 Firebase 数据库的引用,但 Flutte
这是一个广泛的问题,涉及在 Firebase 数据上运行查询与不使用查询类访问数据之间的区别。 下面是一个查询的结构,取自文档并进行了一些缩减: DatabaseReference myRef = d
例如,我现在的引用是 private FirebaseDatabase database; private DatabaseReference reference; database = Fireba
我是一名优秀的程序员,十分优秀!