Unity Firebase RealtimeDatabase GetValueAsync()不返回任何内容

时间:2018-08-28 12:21:00

标签: c# firebase unity3d firebase-realtime-database

以下代码已在 Firebase 4.2版中正确执行:

public void RetrieveSummary(Action<int[]> onRetrieve) {
    Debug.Log("FirebaseStorageService - Retrieving Summary from remote...");
    string referencePath = string.Format("users/{0}/sum", GetUserID());
    FirebaseDatabase.DefaultInstance.GetReference(referencePath).GetValueAsync().ContinueWith(task => {
        if (task.IsCompleted) {
            DataSnapshot snapshot = task.Result;
            if (snapshot.Exists) {
                HammurabiAnalytics.LogCustomEvent("Download_Data_Size", "Summary_User_Data", snapshot.GetRawJsonValue().Length);
                Debug.Log("FirebaseStorageService - Raw Remote Summary Data: " + snapshot.GetRawJsonValue());
                int[] summaryData = JsonConvert.DeserializeObject<int[]>(snapshot.GetRawJsonValue());
                Debug.Log("FirebaseStorageService - Retrieving Summary from remote - DONE");
                onRetrieve(summaryData);
            } else {
                Debug.Log("FirebaseStorageService - User Summary Data is missing!");
                onRetrieve(new int[4]);
            }
        } else {
            Debug.LogError("FirebaseStorageService - RetrieveSummary has failed!");
            onRetrieve(new int[4]);
        }
    });
}

我的意思是说 ContinueWith 已执行,并且能够通过日志消息等继续执行此过程。将 Firebase版本更新为5.2.1 之后,我无法继续。

要详细说明此问题,我可以说在引用上没有数据时,ContinueWith内的代码块不会被调用。如果我在参考上创建数据,则检索工作正常。我也无法添加虚拟数据。

我也找不到解决方法,这使我很难过。任何想法?任何解决方法?任何根本原因的解决方案?

Firebase:5.2.1,Unity:2017.2

1 个答案:

答案 0 :(得分:1)

我想我知道这是怎么回事。首先,确认没有调用您的第一个调试日志语句。我想可能是。最有可能发生的情况是task.Resultnull,从而引发了异常,从而阻止了其余日志功能的执行。由于ContinueWith的工作方式,异常只会被静默消耗。

您可以通过使用task.IsFaulted在从任务中获取结果之前检查任务是否出错来解决此问题。完成只是意味着它已完成运行,而不是意味着它已成功完成,并且如果未成功,则不会填充结果。