Как установить текстовое значение пользовательского интерфейса в регистр из Firebase в Unity? - PullRequest
0 голосов
/ 13 мая 2019

Я работаю в школьном проекте с использованием Unity и Firebase, где мне нужно отобразить имя пользователя текущего пользователя в текстовом поле.

Я уже получаю данные из Firebase, но когда Я пытаюсь установить текст userNameText, ничего не происходит.

Это мой код:

Переменные:

private DatabaseReference reference;
private string userName;
public Text userNameText; 

Инициализация:

void Start()
    {
        //database reference (I'm hiding the project id)
        FirebaseApp.DefaultInstance.SetEditorDatabaseUrl("https://projectID.firebaseio.com/");

        // Get the root reference location of the database.
        reference = FirebaseDatabase.DefaultInstance.RootReference;

        GetUserData();
    }

GetUserData ():

public void GetUserData()
    {
        reference.Child("users").Child(PlayerPrefs.GetString("userUID")).GetValueAsync().ContinueWith(task =>
        {
            if (task.IsFaulted)
            {
                Debug.Log("something was wrong");
            }
            else if (task.IsCompleted)
            {
                Dictionary<string, object> results = (Dictionary<string, object>)task.Result.Value;
                userName= (string)results["userName"];
                Debug.Log(userName);
                userNameText.text = userName;
            }
        });
    }

Когда я запускаю проект, он просто отображает имя пользователя в консоли, но текстовое поле еще не обновлено.

1 Ответ

0 голосов
/ 12 июня 2019

Вы захотите переместить ваш метод void в IEnumerator и установить ссылку на переменную.

IEnumerator GetUserData(){
    var getTask = reference.Child("users").Child(PlayerPrefs.GetString("userUID")).GetValueAsync();
    yield return new WaitUntil(() => getTask.IsCompleted || getTask.IsFaulted);
    if (getTask.IsCompleted)
    {
        Dictionary<string, object> results = (Dictionary<string, object>)task.Result.Value;
        userName= (string)results["userName"];
        Debug.Log(userName);
        userNameText.text = userName;
    }
}

А затем в вашем методе запуска вы можете запустить сопрограмму. У меня также была та же проблема с исчезновением моего текстового поля. Если вы выставите несколько операторов журнала, вы сможете увидеть первый проход чтения вашей функции до вызова firebase и установить текст в пустую строку.

void Start()
{
    //database reference (I'm hiding the project id)
    FirebaseApp.DefaultInstance.SetEditorDatabaseUrl("https://projectID.firebaseio.com/");

    // Get the root reference location of the database.
    reference = FirebaseDatabase.DefaultInstance.RootReference;

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