Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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_Android Fragments_Asynchronous_Firebase Realtime Database - Fatal编程技术网

Android Firebase多查询瓶颈

Android Firebase多查询瓶颈,android,firebase,android-fragments,asynchronous,firebase-realtime-database,Android,Firebase,Android Fragments,Asynchronous,Firebase Realtime Database,我有一个ViewPager,它包含两个不同的片段。在这两个片段中,我试图使用addValueEventListener查询firebase数据库。以下是参考资料- public static DatabaseReference getDatabase() { if (mDatabase == null) { FirebaseDatabase.getInstance().setPersistenceEnabled(true); mDatabase = Fir

我有一个ViewPager,它包含两个不同的片段。在这两个片段中,我试图使用
addValueEventListener
查询firebase数据库。以下是参考资料-

public static DatabaseReference getDatabase() {
    if (mDatabase == null) {
        FirebaseDatabase.getInstance().setPersistenceEnabled(true);
        mDatabase = FirebaseDatabase.getInstance().getReference();

    }
    return mDatabase;
}

在第一个
Fragment
中,大约有500多个条目(加载大约需要8秒),在第二个中,大约有20-30个条目。问题是,第二个片段总是等待第一个片段完成,然后查询第二个片段。有什么办法可以让我分开或者做点什么吗?我真的需要第二个
片段来更快地加载。提前谢谢。

如果我必须解决这个问题,我会像@Mark在评论中建议的那样,对整体情况有点不同的看法。我会在Firebase上实现分页查询,这样我就不必一次获取所有500多行

除此之外,我想保留从Firebase获取的数据的脱机存储。因此,每次加载应用程序时,数据都会填充在先前获取的两个片段中。我将在后台异步运行查询,用户无需等待查询完成即可查看两个片段中的数据。一旦查询完成加载,我就会用新获取的数据相应地更新视图,同时更新本地缓存,以便在下次启动应用程序时为数据提供服务

如果您不想在后台加载数据,不想从缓存中显示初始项,不想使用当前的实现,那么我建议您从包含
ViewPager
的活动中管理所有这些内容。只要一个接一个地执行查询,或者异步执行查询,并在使用
BroadcastReceiver
或类似的方法从Firebase接收到结果后,将结果发布到片段


希望有帮助

您真的需要一次查询500多个项目吗?作为一个用户,我会因为等待项目加载的时间太长而感到沮丧-你应该考虑某种分页方式。@MarkKeen我相信firebase不支持分页,有没有关于如何处理分页的想法/来源?使用
Query
你可以使用
startAt
endAt
limitToFirst()
limitToLast())
等。。完成完整列表应该不难——我会尝试谷歌搜索,因为我确信这个问题已经解决了很多次。据我所知,Firebase调用是异步的。我认为这是一个糟糕的实现,您使用
处理程序来延迟。我正试着写一个答案。然而,答案可能无法直接解决你的问题,但我会尝试提出你可以考虑如何设计整个FialBasic调用。