Android 小部件+;Firebase数据库
概述:我正在尝试为Android创建一个主屏幕小部件,用于接收任务并将其显示在列表中 问题:查询数据库的时间比程序调用Android 小部件+;Firebase数据库,android,firebase,firebase-realtime-database,widget,Android,Firebase,Firebase Realtime Database,Widget,概述:我正在尝试为Android创建一个主屏幕小部件,用于接收任务并将其显示在列表中 问题:查询数据库的时间比程序调用getCount()的时间长 代码: public class WidgetViewFactory implements RemoteViewsService.RemoteViewsFactory { ... @Override public void onCreate() { Database.dueAssignmentDb.addListene
getCount()
的时间长
代码:
public class WidgetViewFactory implements RemoteViewsService.RemoteViewsFactory {
...
@Override
public void onCreate() {
Database.dueAssignmentDb.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot userSnapshot : dataSnapshot.getChildren()) {
Assignment assignment = userSnapshot.getValue(Assignment.class);
assignments.add(assignment);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
...
@Override
public int getCount() {
Log.d("Widget", "getCount: " + assignments.size());
return assignments.size();
}
...
tl;dr期望
getCount()
返回0以外的任何值,则返回0。您确定要从database@Yupi是 啊我在getCount()期间和数据库完成查询之后进行了日志记录,并从数据库中获取了值。它只是在getCount()之后触发。FWIW(我从来没有创建过应用程序小部件):看看,似乎您需要调用AppWidgetManager.notifyAppWidgetViewDataChanged()
中的onDataChange()
,在Firebase数据加载后触发小部件刷新。@BobSnyder这很有效!非常感谢。对于未来的读者:请确保在ValueEventListener的onDataChange()
中调用AppWidgetManager.notifyAppWidgetViewDataChanged()
。不要在RemoteViewsFactory
的onDataSetChanged()
中调用它,因为简而言之,这会导致问题。不幸的是,这些方法的名称非常相似,一开始我把它们弄混了。