我正在尝试从Firebase数据库检索一些数据。我过去曾经做得很好,但是下面的GetValueAsync()
代码有问题。调试时,它卡在“ reference.Database”行中,但是我不确定自己做错了什么。如果在未调试的情况下运行,则不会检索任何信息。
我不确定问题是否出在路径上。调试显示,loggingUserId在下一行引用该值之前正在存储该值,但是该函数的其余部分从未完成或出错。该应用程序已编译,但我永远无法从快照中捕获任何信息。
我的数据库格式如下:
“用户”->
78cVqzA8qNTNigsao3VvdnM0Qol2(正确)->
(几个数据对,例如级别:1,寿命:3等)
最初,我认为是程序正在跳过它,因为它尚未从数据库中检索它,但是我尝试使用async / await以及使用while函数来等待直到检索到数据库,但无论何时,它都不会读取。我怀疑它一定与路径有关,但是我已经四倍检查了数据库信息并且格式正确。
using Firebase;
using Firebase.Database;
using Firebase.Unity.Editor;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.UI;
using Firebase.Auth;
using UnityEngine.SceneManagement;
public static void GetUserData()
{
FirebaseApp app = FirebaseApp.DefaultInstance;
app.SetEditorDatabaseUrl("FIREBASEDATABASELINK (Removed to post this code");
if (app.Options.DatabaseUrl != null)
app.SetEditorDatabaseUrl(app.Options.DatabaseUrl);
DatabaseReference reference =
Firebase.Database.FirebaseDatabase.DefaultInstance.RootReference;
loggedUserId = FirebaseAuth.DefaultInstance.CurrentUser.UserId;
reference.Database.GetReference("users").Child(loggedUserId).GetValueAsync()
.ContinueWith(task =>
{
if (task.IsFaulted)
{
Debug.LogError("Error retrieving user data");
return;
}
if (task.IsCompleted)
{
DataSnapshot userSnapshot = task.Result;
loggedEmail = userSnapshot.Child("email").GetRawJsonValue();
loggedCurrentScore =
userSnapshot.Child("currentScore").GetRawJsonValue();
loggedLevel = userSnapshot.Child("level").GetRawJsonValue();
loggedLives = userSnapshot.Child("lives").GetRawJsonValue();
loggedRound = userSnapshot.Child("round").GetRawJsonValue();
loggedTotalScore =
userSnapshot.Child("totalScore").GetRawJsonValue();
return;
}
});
}
这是Debug在getValueAsync()
上显示的内容。即使我添加了一个等待函数,异步或其他操作,它仍然会显示“尚未计算”。