【问题标题】:How I set an ui text value to a register from Firebase in Unity?如何在 Unity 中将 ui 文本值设置为来自 Firebase 的寄存器?
【发布时间】:2019-05-13 14:31:13
【问题描述】:

我正在一个使用 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;
            }
        });
    }

当我运行项目时,它只是在控制台中显示用户名,但文本框尚未更新。

【问题讨论】:

    标签: c# firebase unity3d


    【解决方案1】:

    您将希望将您的 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;
        }
    }
    

    然后在你的 start 方法中,你就可以启动协程了。我的文本框消失也有同样的问题。如果您放置一些日志语句,您可以看到在调用 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());
    }
    

    【讨论】:

      猜你喜欢
      • 2021-11-12
      • 2018-02-24
      • 2013-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-24
      • 2020-12-04
      相关资源
      最近更新 更多