【问题标题】:Firebase disk persistence not working after app restart应用重启后 Firebase 磁盘持久性不起作用
【发布时间】:2018-11-10 06:30:01
【问题描述】:

我对 firebase 和磁盘持久性有疑问。当我离线并使用setValue时:

 mDatabase.child(spamuId).setValue(contactSpam);

当我在没有重新启动应用程序的情况下上网时,我的数据库已更新,但当我关闭应用程序并激活互联网并打开应用程序时,数据库未更新。通常不需要keepSync(),如果我理解得很好,它会将所有databaseReference 复制到本地存储。我不知道我做错了什么我把它放在我的应用程序类中:

 public class MyApplication extends Application {
    @Override
    public void onCreate() {
        FirebaseDatabase.getInstance().setPersistenceEnabled(true);

如果有人能给我解释,我将不胜感激。

编辑:logcat

当我不重新启动应用程序并且没问题时:

0-556/practical_solutions.fr.numfilterpro D/Persistence:在/ContactReportNoSpamFr/-LDGJofYHq5hTpwD8LqV/date in 1ms 共保留 1 行并删除 1 行

当我重新启动时: 我没有看到任何持久性消息。

编辑:在我的应用中使用简单的计数测试按钮记录:

D/Persistence:交易已完成。经过:20ms

D/RepoOperation:正在中止路径的事务:/test。做作的: /测试

D/PersistentConnection: pc_0 - 试图获取授权令牌

W/BiChannelGoogleApi: [FirebaseAuth: ] getGoogleApiForMethod() 返回 Gms:com.google.android.gms.internal.zzdze@d0effca

D/PersistentConnection: pc_0 - 获取令牌时出错:网络错误 (如超时、连接中断或主机不可达)有 发生了。 pc_0 - 计划连接尝试

D/ConnectionRetryHelper:安排在 480 毫秒内重试

D/PersistentConnection: pc_0 - 试图获取授权令牌 W/BiChannelGoogleApi: [FirebaseAuth: ] getGoogleApiForMethod() 返回 Gms:com.google.android.gms.internal.zzdze@d0effca

D/PersistentConnection: pc_0 - 获取令牌时出错:网络错误 (如超时、连接中断或主机不可达)有 发生了。 pc_0 - 计划连接尝试

D/ConnectionRetryHelper:在 1138 毫秒内安排重试

D/PersistentConnection: pc_0 - 试图获取授权令牌

W/BiChannelGoogleApi: [FirebaseAuth: ] getGoogleApiForMethod() 返回 Gms:com.google.android.gms.internal.zzdze@d0effca

D/PersistentConnection: pc_0 - 获取令牌时出错:网络错误 (如超时、连接中断或主机不可达)有 发生了。 pc_0 - 计划连接尝试

D/ConnectionRetryHelper:在 1404 毫秒内安排重试

【问题讨论】:

  • 我不确定我是否完全理解了这个问题。您是说在您恢复 Internet 连接后,contactSpam 值永远不会发送到服务器?
  • 如果是这种情况,首先要做的是add a completion listener,看看写入是否被服务器拒绝。如果这没有显示任何内容,请enable debug logging 并检查 logcat 输出以查看在您恢复连接时 Firebase 客户端和服务器之间会发生什么。
  • 只有当我在恢复连接之前关闭应用程序时,一旦互联网连接恢复,contactSpam 永远不会被发送到服务器。我会检查所有的。谢谢。
  • 这让我很紧张。没什么特别的,我有这个错误:06-01 11:15:06.259 1775-4141/? E/RemoteViewsAdapterServiceConnection: onServiceDisconnected 当我重新连接这个但什么也没发生 06-01 11:14:14.912 4121-4142/practical_solutions.fr.bloqueurappelsetsms V/FA: 处理排队的服务任务: 4
  • 你添加完成监听了吗?如果是这样,请使用新代码更新您的问题,以及是否有任何回调触发?另外请将日志输出添加到您的问题中,特别是在连接恢复后会发生什么。您应该会看到有关数据库客户端尝试重新连接到服务器,然后发送这些排队写入的消息。

标签: java android firebase firebase-realtime-database


【解决方案1】:

您是否在清单中添加此行

android:name=".MyApplication"

如果不添加,请卸载应用并重新安装

<application
    android:name=".MyApplication"
    android:allowBackup="true"
    android:hardwareAccelerated="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:supportsRtl="true"

【讨论】:

  • 是的,我添加了这一行并记录了它是否进入我的班级。
  • 您正在使用真实设备或虚拟设备。某些 firebase 功能在虚拟设备中不起作用。这可能不是问题。我只是说
  • 真实设备,但它应该像我没有的那样工作?
  • 它应该可以工作..请添加push()。在 setValue 之前并确保一切在活动网络条件下都能正常工作......然后检查您的问题
  • 我没有把我之前推送过的所有代码都放好,它正在使用活动网络。插入是在从 Activity 本身启动的 Dialog 中完成的,该 Activity 本身在 BroadcastReceiver 中启动,带有标志 FLAG_ACTIVITY_SINGLE_TOP FLAG_ACTIVITY_NEW_TASK 和 FLAG_ACTIVITY_SINGLE_TOP。但是当我不关闭应用程序时它会被插入。所以我不明白。 setValue() 请求是否应该在我重新启动应用程序或启用连接时执行?
猜你喜欢
  • 2016-12-03
  • 1970-01-01
  • 2016-09-02
  • 1970-01-01
  • 2018-12-01
  • 1970-01-01
  • 2018-12-03
  • 2019-05-08
  • 1970-01-01
相关资源
最近更新 更多