繁体   English   中英

从 Firebase 数据库中检索数据并统一保存数据

[英]Issue retrieving data from Firebase Database and saving data on unity

我正在使用以下代码从具有 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 只能从主线程调用。 加载场景时,将从加载线程执行构造函数和字段初始化程序。

据我了解,TASK 是一个新线程而不是 Unity 主线程。 我仍然无法在本地统一保存值,或者从任务中获取值。

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

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

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

  }

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

您可以将 ContinueWith 更改为 ContinueWithOnMainThread,但您需要添加“using Firebase.Extensions;”

using Firebase.Extensions;

FirebaseDatabase.DefaultInstance.GetReference("users").Child(userID)
  .GetValueAsync().ContinueWithOnMainThread(task => 
{
    if (task.IsFaulted) 
    {
      // Handle the error...
    }
    else if (task.IsCompleted) 
    {
      DataSnapshot snapshot = task.Result;
      // Do something with snapshot...
    }
});

有关更多示例,请参阅文档: https://firebase.google.com/docs/database/unity/retrieve-data

潜在注意事项:如果您正在关注 Google Sign in with Firebase 的文档并下载 Firebase SDK for Unity 2020,您可能会收到有关与 System.Threading.Tasks 冲突的错误(这发生在我身上)。 如果其他人遇到此错误,可以通过删除或重命名 Unity > Assets > Parse > Plugins 下的 Unity.Compat 和 Unity.Tasks 文件来处理,但不要更改或删除 dotNet45 文件夹中的文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM