【发布时间】:2018-10-05 08:52:36
【问题描述】:
我正在使用 firebase 实时数据库,据我所知,您必须使用
DatabaseReference.addValueEventListener
从 firebase 数据库中读取值。
这里addValueEventListener默认是异步的。我需要同步阅读。对于 FireBase 存储,对于上传文件时的相同问题,我可以通过使用使过程同步
UploadTask.TaskSnapshot await = Tasks.await(uploadTask);
而不是使用
uploadTask.addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
}
})
如上所示,addValueEventListener 是否有任何类似的同步替代方案?
【问题讨论】:
-
尝试从异步 API 同步返回值,这不是一个好主意。您应该按预期异步处理 API。你想通过这种方式得到答案吗?
-
我这样做是因为我在一个已经异步的块中使用这个函数。
-
这个有同步版本吗?
-
在你的应用程序的主线程中调用同步方法可能会完全冻结你的应用程序,这是一种糟糕的用户体验。在 Android 上,您最终可能还会收到 Application Not Responding 对话框。这是你想要的吗?
-
一个
addValueEventListener可以触发多次,所以没有完成。但是addSingleValueEventListener可以完成。请参阅Doug's blost post here,了解如何将addListenerForSingleValueEvent转换为您可以等待的Task。
标签: android firebase firebase-realtime-database