2017-04-05 77 views
2

那麼它似乎我堅持之前再等待數據。我有我的一半小部件的工作和我認爲我知道爲什麼它的失敗,但我不知道如何解決它。件服務不試圖填充集合

在我的窗件服務類,在onDataSetChanged()方法,我打個電話,讓我的數據(異步)。但系統在加載數據之前調用getCount(),因此大小返回0,從不調用getViewAt()。

如果我創建內部onDataSetChanged一些假數據(),而不是調用擺脫火力地堡的真實數據,然後它會顯示就好了。所以我知道它除此之外的作用。

我已經嘗試了各種各樣的事情來讓它工作,但沒有運氣。我不想把這個問題變成一個很長的問題,所以我會盡量保持簡單。 我的問題是系統如何知道數據何時準備好?似乎沒有要,我可以打電話通知它的數據是現在有一種方法。

我可能是完全錯誤的,但我認爲這就是問題所在。 onDataSetChanged()方法不會等待,我無法告訴它。

是什麼使這更混亂的是,在我用它的實際工作假的靜態數據,甚至與異步調用的應用程序的我mockDebug版本。我的結論是,它必須加載得太快,以至於getCount()被調用時就已經準備好了。但更令人困惑的是,在短時間內它也在prodDebug版本中工作,然後沒有,也從此沒有。據我所知,在那段時間我沒有改變任何東西。無論如何,這是我能夠想出的唯一解釋。原因是因爲我可以看到使用調試器或日誌記錄,在從Firebase獲取數據時加載數據之前調用getCount(),導致數據加載失敗,但是如果使用靜態數據加載數據後調用getCount ,讓它成功。

如何使它等待?還是有什麼我可能做錯了?

謝謝。

回答

0

好了,所以我接受了,我不能這樣做異步和感動在ItemWidgetProvider.onUpdate()方法的代碼到一個新的IntentService。我用一個調用替換了代碼,以appWidgetIds作爲Intent的額外啓動服務。

在這個新的IntentService我第一次檢索所有數據,然後調用先前充分利用的onUpdate稱爲代碼()。


有一個問題,我用這個解決方案遇到的就是這樣無論出於何種原因(請評論,如果你懂的),當我嘗試從IntentService傳遞一個序列化對象的WidgetListService它剛剛獲得」工作。我用一個String創建了一個測試Serializable,即使這樣也行不通。與Parcelable一樣的東西。 要解決這個我轉換成一個byte []和發送,而不是。這樣可行。這是我遇到過這個問題的唯一時間,我使用Serializable將相同的對象保存到onSaveInstanceState,並且它工作正常。不知道爲什麼只在小部件中有問題。

編輯:這不起作用。我可以在那裏獲取數據,但似乎沒有辦法更新小部件,所以它僅適用於靜態小部件。

+0

簡單地轉換要通過使用GSON意圖JSON對象,Parcelable和Serialiable對象行事出人意料 沒有合乎邏輯的理由有時 –

+0

是啊,這可能是一個替代的對象以一個byte [],但我無論如何也使用此解決方案。感謝您的想法。 –