从Firebase数据库检索数据并统一保存数据的问题

时间:2018-10-08 11:07:28

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

我正在使用以下代码从Unity3D用户的Firebase数据库中检索数据,在我们的情况下,我正在获得用户级别:

 FirebaseDatabase.DefaultInstance
   .GetReference("users").Child(userID)
   .GetValueAsync().ContinueWith(task =>
   {
       if (task.IsFaulted)
       {
           Debug.LogError("Error retriving user data: " + userID);
         // Handle the error...
       }
       else if (task.IsCompleted)
       {
           DataSnapshot snapshot = task.Result;
           int TempUserLevel = (int)snapshot.Child("Level").Value; 
          //this get's an error 
           PlayerPrefs.SetInt(_UserLevel, TempUserLevel);

       }
   }

错误:

  

TrySetInt只能从主线程调用。构造函数和   字段初始值设定项将在以下情况下从加载线程执行:   加载场景。

据我了解,任务是一个新线程,而不是Unity Main线程。仍然 我似乎无法统一保存本地值,也无法从任务中获取值。

2 个答案:

答案 0 :(得分:1)

它不能被调用,因为continue with是一个委托并且它等待响应。我所做的只是在使用调用此委托之前设置了一个waituntil协程,并设置了bool例如一些bool check = false。

else if(task.IsCompleted)
    {
     // your operation
     check=true;

    }
    ////////
IEnumerator myRoutine()
  {
         yield return new WaitUntil ( () => check );
         // set your playerprefs.

  }

答案 1 :(得分:0)

实际上,您可以将“ ContinueWith”更改为“ ContinueWithOnMainThread”。