Unity Firebase RealtimeDatabase GetValueAsync () ничего не возвращает - PullRequest
0 голосов
/ 28 августа 2018

Следующий код был выполнен правильно с 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 не вызывается, когда нет данных о ссылке. Если я создаю данные по ссылке, поиск работает правильно. Я также не могу добавить фиктивные данные.

Я тоже не мог найти обходной путь, это слишком плохо меня блокирует. Любая идея? Любое решение? Любое решение основной причины?

База огня: 5.2.1, Unity: 2017.2

1 Ответ

0 голосов
/ 19 сентября 2018

Мне кажется, я знаю, что здесь происходит. Сначала убедитесь, что ваш первый оператор журнала отладки не вызывается. Я думаю, что это, вероятно, так. Наиболее вероятно, что task.Result равен null, что приводит к возникновению исключения, препятствующего выполнению остальных функций журнала. Из-за того, как работает ContinueWith, исключение просто используется тихо.

Это можно исправить, проверив, не выполнила ли задача задачу, прежде чем получить результат от нее с помощью task.IsFaulted. Завершение означает только то, что оно выполнено, а не то, что оно успешно завершено, и если оно не было выполнено, Результат не заполняется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...