首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有一种方法可以为消防局做像类这样的适配器?

有没有一种方法可以为消防局做像类这样的适配器?
EN

Stack Overflow用户
提问于 2020-06-23 14:42:47
回答 1查看 182关注 0票数 1

为了在线支持,我目前正在将数据存储到我的应用程序中的方式从sqlite切换到Firestore。即使这是一个很大的飞跃,也意味着我现在的架构会有很多变化。我想知道是否有一种方法来模拟Adapter类(就像SQlite中使用的那样),这样我就可以保持这些更改最小,至少通过重新定义我的方法名称和返回类型,并且避免在我需要的地方显式地写入每个文档读/写。

在我所谓的"Adapter类似类“中,我最初尝试的是在”适配器类“的构造函数中将文档的数据加载到一个专用对象中。但是它显然不起作用,因为Firebase查询是异步的,这里解释了:

是否有一种方法可以轻松地将此数据库调用写入函数?

我想做什么是可能的吗?还是我注定要重做每件事?

EN

Stack Overflow用户

回答已采纳

发布于 2020-06-23 16:07:45

简短的回答:是的,但你不应该

如果你绝对必须:

通过使用CountDownLatch创建自己的Future实现,可以将异步调用包装在Firebase中。是Java接口类似于JavaScript中的承诺,它允许您传递异步计算的“未来结果”,直到您绝对需要它为止。

检查这个StackOverflow的答案以获得一个示例实现。

然后,您将使用这个包装器实现“类似适配器的类”,它将返回一个Future,类中的方法将返回future.get()。这个调用阻塞执行它的线程,当Future解析时,调用计算为包含在Future中的值(“解包装”)。

这就是为什么你不该:

  • 在Android中,阻止UI线程通常是一个非常糟糕的主意,所以如果您当前的Adapter已经是一个同步调用,它将一直阻塞直到Firebase查询完成。
  • 如果您已经用SQLite查询阻塞UI线程,并且认为您可能因此而没事,那么请考虑这样的可能性,即现在这并不是一个问题,因为SQLite查询太快而不重要。当您切换到Firestore时,查询的平均时间可能要长得多,并且由于不同的网络条件等原因,它们的响应时间会有更大的差异。
  • 如果考虑使用异步API进行重构并不是非常不可行的话,会认真考虑使用。您的查询现在将花费更长的时间,您可能无论如何都需要“加载”指示符,因此使用异步API会有所帮助。当需要时,您还可能看到并行运行查询的机会,但它们并不相互依赖,保持异步允许您这样做。
    • 如果查询的速度足够快到顺序与并行并不重要,这一点以前可能并不重要,但现在可以了。
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62537443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档