我正在使用Unity SDK for Firebase Realtime Database。大多数情况下,它工作得很好。但是,有时它会返回旧数据进行查询。有时它只是上次更新之前的数据,有时,我甚至不确定它之间有多少更新。
你可以在下面看到我的DB参考,注意levelDepth, keyCount, keysAquiredLevels, gold, currentLevelCompleted
值。
x1c 0d1x的数据
下面是我在Unity中使用var response = await databaseReference.GetValueAsync();
时得到的原始响应的图像。您会注意到所有这些属性都与以前的更新不同。
的
这段代码大部分时间都能正常工作,我真的要反复敲10-20次才能重现这个问题,但是它发生了!我不知道为什么。
我已经设置了FirebaseDatabase.DefaultInstance.SetPersistenceEnabled(false);
,并尝试将keepSync
设置为true和false,但问题仍然发生。
void Start()
{
FirebaseDatabase.DefaultInstance.SetPersistenceEnabled(false);
Firebase.AppOptions options = AppOptions.LoadFromJsonConfig(firebaseOptions.text);
FirebaseApp.Create(options);
}
public static async Task<CurrentLevelConfig> GetCurrentLevelConfig()
{
DatabaseReference databaseReference = FirebaseDatabase.DefaultInstance
.RootReference
.Child("users")
.Child(FirebaseConfig.user.UserId)
.Child("currentLevelConfig");
var response = await databaseReference.GetValueAsync();
if (response.Exists)
{
CurrentLevelConfig config = JsonConvert.DeserializeObject<CurrentLevelConfig>(response.GetRawJsonValue());
Debug.Log("Got current level config!");
return config;
}
return null;
}
字符串
任何想法将不胜感激。
添加更多屏幕截图添加CheckAndFixDependenciesAsync()
的解决方案似乎没有解决这个问题。由于这是一个间歇性的问题,需要一些时间才能重现。这里是原始数据库快照的其他屏幕截图,显示的数据与控制台显示的数据不同。您会看到突出显示的字段反映了完全不同的值。
1条答案
按热度按时间t1rydlwq1#
尝试运行相同的查询,但不是等待结果,而是使用
ContinueWithOnMainThread
传递回调,如检索数据-读取数据一次中所示详细地说,你是在一个你正在生成的线程上运行这个查询吗?这可能是一个竞争条件。
根据我随后的评论更新预期的解决方案:
在运行所有Firebase功能之前调用FirebaseApp. CheckAndFixingdenciesAsync。使用回调,然后运行FirebaseApp.dll。
使用回调方法和DefaultInstance(在后台调用Create())执行此操作的示例可以在将Firebase添加到Unity项目中看到。