当前位置: 首页 > 知识库问答 >
问题:

如何处理离线Firebase数据库时,Android应用程序被杀死?

寇照
2023-03-14

我第一次在firebase上工作,了解firebase的脱机功能,测试了两个场景:

设想1(工作):

>

按后退按钮(关闭应用程序)

场景2(不工作):

  1. 脱机模式,将数据写入firebase数据库
  2. 关闭应用程序
  3. 从后台删除应用程序(删除应用程序)
  4. 已联机,未添加数据

我加了一行:

Firebase.getDefaultConfig().setPersistenceEnabled(true);

如何处理场景2?我需要通过本地数据库处理这个场景吗?

共有3个答案

狄玉书
2023-03-14

无需使用本地数据库处理场景2。使用Firebase。getDefaultConfig()。在应用程序类中设置persistenceenabled(true),并在清单文件中设置android:name=“yourapplicationclass”。要在更改网络ie在线/离线时处理同步,请使用事务处理程序处理与firebase数据库的本地同步,因为某些tome数据未推送到firebase服务器。就这样,我用内网换法解决了这个问题:

mDatabase.runTransaction(new Transaction.Handler() {
            @Override
            public Transaction.Result doTransaction(MutableData mutableData) {
                if(mutableData.getValue() == null) {
                    mutableData.setValue(1);
                } else {
                    mutableData.setValue((Long) mutableData.getValue() + 1);
                }
                return Transaction.success(mutableData); //we can also abort by calling Transaction.abort()
            }

            @Override
            public void onComplete(DatabaseError databaseError, boolean b, DataSnapshot dataSnapshot) {

            }
        });
段劲
2023-03-14

您是否使用Firebase.getDefaultConfig(). setPeristextEn的(true);保持同步(true)

因为在Firebase文档中说,keepSynced(true)是谁让“魔法”发生的(连同setPersistenceEnabled(true)):

通过对某个位置调用keepSynced(true),该位置的数据将自动下载并保持同步,即使该位置没有附加侦听器。此外,当一个位置保持同步时,它不会从持久磁盘缓存中退出。

因此,如果您没有使用它,您没有在本地持久化您的数据库,那么当您“杀死”应用程序时,当您的应用程序再次打开时,将不会有任何可查询的数据库。

仲孙雅达
2023-03-14

我猜您正在使用一些服务来同步数据,这在第二种情况下不起作用。为此,当用户打开数据服务时,您将收到一个广播接收器,检查服务是否未运行,然后启动服务。

 类似资料:
  • 我有一个可以监听Firebase实时数据库中的任何值更改。在线模式下,一切正常。 但在脱机模式下,设备处于脱机状态,我的Web服务器在Firebase实时数据库上完成了多个事务,其值与我从Android中输入的侦听器的值相同。设备联机后,它将只侦听最后一个事务,并跳过其间完成的其他事务。 PFB参考链接。到目前为止我已经完成的PFB代码:

  • 我使用Maps API v2与Google Maps制作了一个android应用程序,该应用程序从MySQL数据库获取PHP生成的JSON数据。当电话连接到Internet时,这非常有效。我的问题是什么是最好的方法,使应用程序也可以离线使用。我只需要一个很小的离线可用性区域,我可以将JSON下载到电话存储并解析它,但映射部分是我的主要关注点。据我所知,这在谷歌地图上是不可能的,但有什么其他选择呢?

  • 为了防止应用程序的数据因任务管理器的“结束任务”而丢失,我尝试在WM_CLOSE事件的函数处理程序中保存数据。 如果我通过Alt F4或“关闭”按钮关闭了应用程序,该应用程序可以成功保存数据。但是当我通过任务管理器杀死它时,保存数据的过程无法正常进行。似乎保存进程中途终止了。 我试图通过VS2015 IDE调试它,调试器成功地拦截了WM_CLOSE处理程序中的断点,但它无法进一步,点击F10单步执

  • 我离线使用此代码,并使用Firebase同步Android应用程序中的数据。Firebase离线数据库数据清除当我重新启动移动设备或此Android/Firebase应用程序? //存储我最后一次断开连接的时间戳(我最后一次被看到在线)最终数据库参考lastOnlineRef=database.get参考(/用户/joe/lastOnline);

  • 问题内容: 我目前正在使用angularJS和phonegap构建适用于Android / iOS的测试应用程序。 该应用程序仅使用存储在Firebase数据库中的文本数据。我希望该应用程序具有自己的本地数据库(在设备离线时使用),并在某个时间(设备在线时)与Firebase数据库同步。 离线模式使用phonegap / cordova的存储API。我可以检查设备的在线状态并定期备份在线数据库吗?

  • 也就是说,我想创建应用程序,然后让这些应用程序访问一个项目的特定Firebase数据库。 查看Firebase Android文档,我找不到一种方法来使用下面的方法将数据发送到另一个项目中的另一个Firebase数据库,但其中的引用是另一个项目的。