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

Firebase数据库未提交联机数据阻塞侦听器

丌官子安
2023-03-14

我正在使用Firebase数据库服务来同步用户数据。我启用了脱机兼容性,问题是在使用了几个月后,用户的数据没有提交到在线数据库中,显然是因为用户的电话系统阻止了应用程序的互联网连接。

在某些情况下,我设法引导用户启用“无限制数据使用”选项,但并不适合所有人。

在我的例子中,问题是监听器:

void onDataChange(DataSnapshot var1);

我还尝试用gooffline()替换goonline(),但没有任何结果。

我不明白为什么手机会阻止我的应用程序同步,让脸书和Youtube等应用程序消耗大量的互联网数据。

这种行为只发生在Android设备上,在使用相同Firebase数据库的iOS手机上没有问题。

11-13 21:12:28.477 15765 15856 D PersistentConnection: pc_0 - Scheduling connection attempt
11-13 21:12:28.477 15765 15856 D ConnectionRetryHelper: Scheduling retry in 26091ms
11-13 21:12:54.597 15765 15856 D PersistentConnection: pc_0 - Trying to fetch auth token
11-13 21:12:55.747 15765 15856 D PersistentConnection: pc_0 - Error fetching token: An internal error has occurred. [ 
TOKEN_EXPIRED ]

当我试图插入新数据时:

RepoOperation: Aborting transactions for path: [the path]

共有1个答案

戚奇略
2023-03-14

经过长时间的调查,我发现令牌没有自动刷新。

首先,检查当前用户是否使用FirebaseAuth.AuthStateListener登录

检查是否需要刷新令牌

    public static boolean isOnline(Context context)
    {
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();

        return networkInfo != null && networkInfo.isConnectedOrConnecting();
    }
try
{
    user.getIdToken(true).addOnCompleteListener(new OnCompleteListener<GetTokenResult>()
    {
        @Override
        public void onComplete(@NonNull Task<GetTokenResult> task)
        {
            if (task.isSuccessful())
            {
                //succcess
            } else
            {
                //need login again
            }
        }
    });
}catch(Exception e)
{
    //need login again
}
 类似资料:
  • 一切正常,但DatabaseReference无法获取数据,这就像是忽略了我的代码运行,就像我的internet无法运行一样,请帮助我,我是这个社区的新手,下面是我的代码和图片。 以前它是工作的,但由于我只是更改了一些代码,使只有currentVersion>=vCode,这样即使数据库中的值是 firebase数据库映像 mainactivity.java manifest.xml 依赖关系

  • 我正在做一个应用程序,我必须从firebase获取一些数据,并在RecyclerView中显示。但textView字段仍然为空,并且不显示任何数据。下面是db结构。我想获取“AlphabetMatching”下的节点的数据,但未能获取。回收器显示了我为行所做的布局,但没有数据库中的数据。 activity班: VIEWHOLDER类: } AMAW类 }

  • 问题内容: 我需要连续监视数据库行以检查更改(更新)。如果其他来源进行了某些更改或更新,则应在我的应用程序上触发该事件(我正在使用WCF)。有什么办法可以连续监听数据库行中的更改吗? 我可能拥有更多事件来监视同一表中的不同行。在性能方面有什么问题。我正在使用C#Web服务监视SQL Server后端。 问题答案: 不久前,我有一个非常相似的要求,我使用CLR SP将数据推送到消息队列中来解决了这个

  • 我的应用程序有一个目录,它使用Firebase来存储和更新数据。我想显示已经缓存的数据,如果应用程序被杀死,并再次启动,而不在线。 firebase是否在应用程序被终止时删除缓存? 无论用户在线或离线,我们都可以首先推送离线数据。

  • 与RDBMS相似,OrientDB也提供了和等事务概念。 提交是指通过保存对数据库的所有更改来关闭事务。 回滚是指将数据库状态恢复到您打开事务的位置。 以下语句是数据库命令的基本语法。 注 - 只有在连接到特定数据库并开始事务后,才能使用此命令。 示例 在这个例子中,我们将使用在前一章中创建的名为的数据库。将看到提交事务的操作并使用事务来存储记录。 首先,使用以下命令启动事务。 然后,使用以下命令

  • 正如上图所示,我的数据库树结构很简单,它有一个名为的主节点,在这个节点下,我创建了许多其他聊天。Evey单个子节点将有许多其他带有聊天消息的子节点。 使用Firebase管理sdk am监听主节点IE。 现在,当子节点发生任何更改时,即当在子节点中添加新的聊天消息时,方法将被激发,并使用具有所有子节点的datasnapshot。假设如果新的聊天消息被添加到节点,那么方法就会用所有以前的聊天消息触发