2016-12-07 29 views
0

我希望你能幫助我。 目前我使用Unity製作iOS和Android手機遊戲,並使用Firebase實時數據庫創建全球排行榜。 我有以下問題。如果我想從所有用戶那裏查詢,那麼MaxLevel會根據這些用戶進行排序,並且僅限於達到90+級別的用戶,我只能在我的應用程序的一生中第一次獲得結果。在第一次查詢後,我無法進行第二次查詢。關閉遊戲並重新啓動後,它會再次運行一次,然後再次停止。 如果我問一個沒有限制它一直工作。我在Google上對這個問題一無所知,我不知道我是否是第一個出現這個問題的人,因爲Firebase for Unity仍處於測試階段,或者我只是爲了解決這個問題。 這是我使用的查詢代碼帶有startat()的統一/ Firebase查詢只能在一生中只有一次

// Initi(稱爲在其他腳本只有一次)

FirebaseApp.DefaultInstance.SetEditorDatabaseUrl ("https://game-tow.firebaseio.com/"); 
FirebaseReference = FirebaseDatabase.DefaultInstance.RootReference; 

//查詢

leaderbaordRef = FirebaseRefrence; 

public void Query(int level, DatabaseReference leaderboardRef){ 
    GoldUserList = new List<UserDetails>(); 

    leaderboardRef.Child ("Users").OrderByChild("LevelMax").StartAt(90).GetValueAsync().ContinueWith (taskGold => { 

     if (taskGold.IsFaulted) { 
      Debug.LogError (taskGold.Exception); 
      return; 
     } 

     foreach (DataSnapshot GoldUser in taskGold.Result.Children) { 
      UserDetails ListUser = new UserDetails (GoldUser.Key); 
      GoldUserList.Add (ListUser); 
      print ("GoldUser" + ListUser.username); 
     } 

    }); 
} 

希望有人能幫助我

回答

0

由於您致電GetValueAsync(),該值確實只會獲得一次。正如documentation所說:

您可以使用GetValueAsync方法讀取給定路徑上內容的靜態快照一次。

如果您想監聽更新,註冊一個偵聽器ValueChanged事件作爲記錄here

可以使用ValueChanged事件在給定的路徑上的內容變化認購。每次連接偵聽器時都會觸發此事件,並且每次包括子級在內的數據都會發生更改。

FirebaseDatabase.DefaultInstance 
    .GetReference("Leaders") 
    .ValueChanged += (object sender, ValueChangedEventArgs args) => { 
    if (args.DatabaseError != null) { 
     Debug.LogError(args.DatabaseError.Message); 
     return; 
    } 
    // Do something with the data in args.Snapshot 
    }; 
0

我一直有與插件(1.0.1)的最新版本的valueChanged聽衆的問題:當它連接的事件監聽器被調用一次,但沒有任何後續更改。數據庫中的數據肯定會發生變化,所以我認爲這是新版本的bug(在版本1.0.0中按預期調用了監聽器)。