C# 如何一次性从Firebase获取数据快照(使用C)?

C# 如何一次性从Firebase获取数据快照(使用C)?,c#,firebase,unity3d,firebase-realtime-database,C#,Firebase,Unity3d,Firebase Realtime Database,我和Unity一起工作,使用C语言,需要在场景开始时获取快照。但是我需要一次,而且只需要一次快照。 到目前为止,我发现的所有示例都使用某种事件侦听器来获取快照,这意味着快照可以被某个事件覆盖。 在根据教程创建事件侦听器之后,我使用if语句解决了这个问题 我正在使用的代码: DataSnapshot dbSnapshot; // <-- the snapshot I need to use later void Start(){ StartListener(); // Ot

我和Unity一起工作,使用C语言,需要在场景开始时获取快照。但是我需要一次,而且只需要一次快照。 到目前为止,我发现的所有示例都使用某种事件侦听器来获取快照,这意味着快照可以被某个事件覆盖。 在根据教程创建事件侦听器之后,我使用if语句解决了这个问题

我正在使用的代码:

DataSnapshot dbSnapshot; // <-- the snapshot I need to use later

void Start(){
    StartListener();
    // Other stuff happens...
}

protected void StartListener() {
    dbRoot.ValueChanged += (
    object sender2, ValueChangedEventArgs e2) => {
        if (e2.DatabaseError != null) {
            Debug.LogError(e2.DatabaseError.Message);
            return;
        }
        Debug.Log("ValueChangedEventArgs");
        if (e2.Snapshot != null || e2.Snapshot.Value != null){
            if (dbSnapshot == null){
            //  This happens once, and prevents the dbSnapshot from being overwritten
                dbSnapshot = e2.Snapshot;
            }
        }
    };
}

这似乎可行,但我想知道是否有可能在没有事件侦听器的情况下获取快照,或者至少有更优雅的解决方案。

下面是如何获取排行榜的示例,此示例仅获取一个数据

FirebaseDatabase.DefaultInstance
           .GetReference("Leaders").OrderByChild("Score")
           .GetValueAsync().ContinueWith(task =>
           {
               if (task.IsFaulted)
               {
                   Debug.LogError("Get faulted");
                   return;
               }
               if (task.Result != null && task.Result.ChildrenCount > 0)
               {
                   Debug.Log("Get data success!");
                   ...
               }
           });

谢谢,@TrungBui。我想我以前遇到过这段代码。我不清楚的是,在本例中,如何设置DataSnapshot dbSnapshot变量的值,即我在代码开头声明的变量。我正在填补数据库的空缺,所以所有与Firebase有关的事情对我来说都是很神秘的。我不太明白你的问题。是否要在firebase上设置dbSnapshot变量的值?刚刚使用的SetRawJsonValueAsync类似于:FirebaseDatabase.DefaultInstance.GetReferenceLeaders.ChildUser.ChildUser id.SetRawJsonValueAsyncuserData.ContinueWithtask=>。。。