Java Firebase实时数据库不';t更新值
我一直在使用firebase数据库编写一个应用程序,在过去的两天里,它不起作用。 我的意思是我有一个到数据库的连接,但是当我试图通过设置Java Firebase实时数据库不';t更新值,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我一直在使用firebase数据库编写一个应用程序,在过去的两天里,它不起作用。 我的意思是我有一个到数据库的连接,但是当我试图通过设置addListenerForSingleValueEvent来读取信息时,它不会运行ValueEventListener,即使我updateChildren DatabaseReference mBlaze = FirebaseUtil.getDatabase(PLACES); mBlaze.addListenerForSingl
addListenerForSingleValueEvent
来读取信息时,它不会运行ValueEventListener
,即使我updateChildren
DatabaseReference mBlaze = FirebaseUtil.getDatabase(PLACES);
mBlaze.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snapShot : dataSnapshot.getChildren()) {
System.out.println("Hello");
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
System.out.println("Error");
}
});
long sTime = System.currentTimeMillis();
while (!triggers[0])
if (System.currentTimeMillis() - sTime > 5000)
我在数据库中有一个触发器值,仅用于运行addListenerForSingleValueEvent
。
如果我尝试在我的设备\模拟器上运行此操作,它将不会打印消息“Hello”,也不会打印消息“Error”。
这是一个问题的原因是我正在尝试根据firebase数据库验证代码。 我给它一个5秒的时间窗口,让值改变,这意味着代码被找到了,如果5秒后
的值触发[0]
没有改变,这意味着代码无效。在我尝试减少代码的过程中,我偶然发现了
setLogLevel
,在我将其与Level.DEBUG
一起使用后,我发现这一行反复出现:
获取令牌时出错:用户的凭据不再有效。用户必须重新登录
正如我在后面所说的,当我试图减少代码时,我发现了
setLogLevel
方法,它与Level.DEBUG
一起使用,然后我使用它来发现错误:获取令牌时出错:用户的凭据不再有效。用户必须重新登录 在四处窥探之后,我发现,由于Firebase身份验证机制(授予用户一个令牌24小时,然后取消身份验证)导致无法访问服务器。
因此,解决方案是实现perma login[永久登录]功能,或者每次用户销毁应用程序或从头启动应用程序时,检查是否有用户使用
FirebaseAuth
中的getCurrentUser()
方法登录,如果有,则注销
TL;博士:确保您的用户登录时间不超过24小时,如果有,请断开连接,然后重新连接。正如我稍后所述,当我试图减少代码时,我找到了
setLogLevel
方法,该方法与Level.DEBUG
一起使用,然后用于发现错误:获取令牌时出错:用户的凭据不再有效。用户必须重新登录 在四处窥探之后,我发现,由于Firebase身份验证机制(授予用户一个令牌24小时,然后取消身份验证)导致无法访问服务器。
因此,解决方案是实现perma login[永久登录]功能,或者每次用户销毁应用程序或从头启动应用程序时,检查是否有用户使用
FirebaseAuth
中的getCurrentUser()
方法登录,如果有,则注销
TL;博士:确保用户登录时间不超过24小时,如果有,请断开连接,然后重新连接。首先,即使不调用
updateChildren
,也应该运行ValueEventListener
。其次,您是否检查了是否调用了onCancelled
?对不起,我很难理解您看到的行为和您期望的行为。在运行代码之前,您是否可以将代码简化为并包含JSON(作为文本,无屏幕截图)?@TheSunshinator取消后的不会被调用@FrankvanPuffelen我减少了代码,但我怀疑它会导致同样的问题\与您缺乏连接。请注意,我在尝试减少代码时发现了一个错误。实际上,while
循环可以防止触发ValueEventListener
。我有一个类似的问题,我有一个while(true)if(isTriggered)break
似乎比ValueEventListener更重,或者在处理器上的优先级更高,因此它从未被触发,我的程序冻结。您应该使用接口
进行回调。首先,即使不调用updateChildren
,也应该运行ValueEventListener
。其次,您是否检查了是否调用了onCancelled
?对不起,我很难理解您看到的行为和您期望的行为。在运行代码之前,您是否可以将代码简化为并包含JSON(作为文本,无屏幕截图)?@TheSunshinator取消后的不会被调用@FrankvanPuffelen我减少了代码,但我怀疑它会导致同样的问题\与您缺乏连接。请注意,我在尝试减少代码时发现了一个错误。实际上,while
循环可以防止触发ValueEventListener
。我有一个类似的问题,我有一个while(true)if(isTriggered)break
似乎比ValueEventListener更重,或者在处理器上的优先级更高,因此它从未被触发,我的程序冻结。您应该使用接口
进行回调。