Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 小部件+;Firebase数据库_Android_Firebase_Firebase Realtime Database_Widget - Fatal编程技术网

Android 小部件+;Firebase数据库

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

概述:我正在尝试为Android创建一个主屏幕小部件,用于接收任务并将其显示在列表中

问题:查询数据库的时间比程序调用
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()
中调用它,因为简而言之,这会导致问题。不幸的是,这些方法的名称非常相似,一开始我把它们弄混了。