0

我已经将数据存储在 Parse 中,现在我必须访问它来为玩游戏的用户创建前十名分数,从而允许用户仅显示在列表中。数据的存储使得每个游戏都有一个运行有一个会话,该会话有一个具有名称、通行证等的用户。

所以它运行会话 => 用户(姓名、通行证、电子邮件等)。

我需要访问用户的名称,以检查用户是否已经出现在 topTen 上并显示名称。

虽然我可以访问 Session 上的数据,但我无法访问 User 上的数据。

        int counter = 0;

    ParseQuery<ParseObject> query = ParseObject.GetQuery("Runs").WhereEqualTo("scoreIdentifier", GameController.instance.scoreContext).OrderByDescending("score");
    query.Include("session.user");
    query.FindAsync().ContinueWith(t => {
        IEnumerable<ParseObject> results = t.Result;
        foreach (var item in results) {
            if (item.ContainsKey("score")) {
                if (counter < 10) {
                    topTenScores[counter] = item.Get<int>("score");
                    topTenNames[counter] = item.ObjectId;
                    ParseObject session = item.Get<ParseObject>("session");
                    Task<ParseObject> user = session.FetchAsync<ParseObject>();

                    user.ContinueWith(tt => {
                        ParseObject userName = tt.Result;
                        Debug.Log("CHECK FOR TT " + tt.Result.ObjectId);
                    });
                }
                if (counter == 9) {
                    updateTopTen = true;
                }
                counter++;
            }
            if (counter < 10)
                updateTopTen = true;
        }
    });

tt.Result.ObjectId 为 Session 写出 objectId,而我认为它是为 User 写的。

关于我做错了什么的任何建议?

4

1 回答 1

0

我自己想通了 - fetchAync() 需要更多的迭代:

public void TopTenHighScore() {
    int sessionCounter = 0;

    ParseQuery<ParseObject> query = ParseObject.GetQuery("Runs").WhereEqualTo("scoreIdentifier", GameController.instance.scoreContext).OrderByDescending("score");
    query.Include("session.user");
    query.FindAsync().ContinueWith(t => {
        IEnumerable<ParseObject> results = t.Result;
        foreach (var item in results) {
            if (item.ContainsKey("score")) {
                if (sessionCounter < 10) {
                    // --- this is for the overall Score
                    topTenScores[sessionCounter] = item.Get<int>("score"); 

                    ParseObject sessionPointer = item.Get<ParseObject>("session");
                    Task<ParseObject> session = sessionPointer.FetchAsync<ParseObject>();  

                    session.ContinueWith(tt => {
                        ParseObject userPointer = tt.Result;                            
                       Task<ParseObject> user = userPointer.Get<ParseObject>("user").FetchAsync<ParseObject>();

                       user.ContinueWith(ttt => {
                           ParseObject userFinal = ttt.Result;
                           userNamesList.Add(userFinal.Get<string>("displayName"));
                       });
                    });
                }
                if (sessionCounter == 9) {
                    sessionCounterDone = true;
                }
                sessionCounter++;
            }
            // if the amount of sessions played in total is not above 10
            if (sessionCounter < 10)
                sessionCounterDone = true;
        }
    });
}
于 2015-03-23T13:36:01.013 回答