Mic*_*ovo 5 android android-widget firebase-realtime-database
好吧,看来我又被卡住了。我的小部件有一半在工作,我想我知道它为什么会失败,但我不知道如何修复它。
在我的小部件服务类的 onDataSetChanged() 方法中,我调用以获取我的数据(异步)。但是系统会在数据加载之前调用 getCount(),因此大小返回 0,并且从不调用 getViewAt()。
如果我在 onDataSetChanged() 中创建一些假数据而不是调用以从 Firebase 获取真实数据,那么它会显示得很好。所以我知道它的工作原理除此之外。
我已经尝试了各种方法来让它工作,但没有运气。我不想把它变成一个很长的问题,所以我会尽量保持简单。我的问题是系统如何知道数据何时准备好?似乎没有我可以调用的方法来通知它数据现在已经存在。
我可能完全错了,但我认为这就是问题所在。onDataSetChanged() 方法不会等待,我无法告诉它。
更令人困惑的是,在我使用假静态数据的应用程序的 mockDebug 版本中,即使使用异步调用,它也确实有效。我的结论是它的加载速度必须如此之快,以至于在调用 getCount() 时它已准备就绪。但更令人困惑的是,有一段时间它也在 prodDebug 版本中工作,然后没有,也没有。据我所知,在那段时间我没有改变任何东西。无论如何,这是我能想出的唯一解释。原因是因为我可以在调试器或日志记录中看到,当我从 Firebase 获取数据时,在加载数据之前调用了 getCount(),导致它失败,但如果我使用静态数据,它会在加载数据后调用,让它成功。
我如何让它等待?或者我可能做错了什么?
谢谢。
好的,解决方案 2:使用CountDownLatch将异步调用转换为同步调用。
这样我就可以从 onDataSetChanged() 内部获取所有数据,就像我最初尝试的那样,只需要几行额外的代码。
到目前为止,我已经能够填充小部件列表并向其中添加数据。
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/CountDownLatch.html
| 归档时间: |
|
| 查看次数: |
410 次 |
| 最近记录: |