Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 在尝试填充集合之前,Widget服务不会等待数据大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
好吧,我似乎再次陷入困境.我让我的小部件工作一半,我想我知道为什么它失败但我不知道如何解决它.

在我的widget服务类中,在onDataSetChanged()方法中,我调用获取我的数据(异步).但是系统在加载数据之前调用getCount(),因此返回0表示大小,并且从不调用getViewAt().

如果我在onDataSetChanged()中创建一些假数据而不是调用从Firebase获取真实数据,那么它将显示正常.所以我知道它与众不同.

我已经尝试过各种各样的东西让它起作用但没有运气.我不想把它变成一个很长的问题,所以我会尽量保持简单.我的问题是系统如何知道数据何时准备就绪?似乎没有一种方法我可以调用它来通知它数据现在存在.

我可能完全错了,但我认为这就是问题所在. onDataSetChanged()方法不等待,我无法告诉它.

让我更加困惑的是,在我使用假静态数据的应用程序的mockdebug版本中,即使使用异步调用,它也能正常工作.我的结论是它必须加载得如此之快,以至于在调用getCount()时就已经准备好了.但更令人困惑的是,在短时间内它也在proddebug版本中工作,然后没有,也从未有过.据我所知,那段时间我没有改变任何东西.无论如何,这是我能够提出的唯一解释.原因是因为我从调试器或日志中看到getCount()在我从Firebase获取数据时加载数据之前被调用,导致它失败,但如果我使用静态数据则在加载数据后调用它,让它成功.

我如何让它等待?或者还有其他我可能做错了什么?

谢谢.

解决方法

好的,解决方案编号2:使用COuntDownLatch将异步调用转换为同步调用.

有了这个,我可以从onDataSetChanged()内部获取所有数据,因为我最初尝试使用几行额外的代码.

到目前为止,我已经能够填充小部件列表并向其添加数据.

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/CountDownLatch.html

Sync version of async method

大佬总结

以上是大佬教程为你收集整理的android – 在尝试填充集合之前,Widget服务不会等待数据全部内容,希望文章能够帮你解决android – 在尝试填充集合之前,Widget服务不会等待数据所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。