件服务不试图填充集合

件服务不试图填充集合

问题描述:

那么它似乎我坚持之前再等待数据。我有我的一半小部件的工作和我认为我知道为什么它的失败,但我不知道如何解决它。件服务不试图填充集合

在我的窗件服务类,在onDataSetChanged()方法,我打个电话,让我的数据(异步)。但系统在加载数据之前调用getCount(),因此大小返回0,从不调用getViewAt()。

如果我创建内部onDataSetChanged一些假数据(),而不是调用摆脱火力地堡的真实数据,然后它会显示就好了。所以我知道它除此之外的作用。

我已经尝试了各种各样的事情来让它工作,但没有运气。我不想把这个问题变成一个很长的问题,所以我会尽量保持简单。 我的问题是系统如何知道数据何时准备好?似乎没有要,我可以打电话通知它的数据是现在有一种方法。

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

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

如何使它等待?还是有什么我可能做错了?

谢谢。

好,溶液编号2:异步调用转换成一个同步调用与CountDownLatch

有了这个,我可以从里面onDataSetChanged()得到的所有数据,我本来想用的代码只是一对夫妇的额外线。

到目前为止,我已经能够填充部件清单,并添加数据。

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

Sync version of async method

好了,所以我接受了,我不能这样做异步和感动在ItemWidgetProvider.onUpdate()方法的代码到一个新的IntentService。我用一个调用替换了代码,以appWidgetIds作为Intent的额外启动服务。

在这个新的IntentService我第一次检索所有数据,然后调用先前充分利用的onUpdate称为代码()。


有一个问题,我用这个解决方案遇到的就是这样无论出于何种原因(请评论,如果你懂的),当我尝试从IntentService传递一个序列化对象的WidgetListService它刚刚获得”工作。我用一个String创建了一个测试Serializable,即使这样也行不通。与Parcelable一样的东西。 要解决这个我转换成一个byte []和发送,而不是。这样可行。这是我遇到过这个问题的唯一时间,我使用Serializable将相同的对象保存到onSaveInstanceState,并且它工作正常。不知道为什么只在小部件中有问题。

编辑:这不起作用。我可以在那里获取数据,但似乎没有办法更新小部件,所以它仅适用于静态小部件。

+0

简单地转换要通过使用GSON意图JSON对象,Parcelable和Serialiable对象行事出人意料 没有合乎逻辑的理由有时 –

+0

是啊,这可能是一个替代的对象以一个byte [],但我无论如何也使用此解决方案。感谢您的想法。 –