任何人都可以帮助我使用统一从解析中检索数据吗?

时间:2015-12-07 12:20:07

标签: c# parse-platform unity3d

我已设法存储数据,但我无法检索它,如果有人可以帮助我至少获得一个示例工作,我将非常感激。

首先我在用户注册时存储数据:

public void SetupNewParseMember(ParseUser user)
{
    ParseObject gameScore = new ParseObject("GameScore");
    gameScore["cash"] = 500;
    gameScore["playerName"] = user.Username;
    gameScore["HighestCash"] = 500;
    gameScore["GamesPlayed"] = 0;


    Task saveTask = gameScore.SaveAsync();

}

这很好用,我可以在解析中看到数据,一切似乎都没问题。

问题是当我尝试检索对象时。

public void SetupMainScreen(ParseUser user)
{
    var query = ParseObject.GetQuery("GameScore").WhereEqualTo("playerName", user.Username);
    query.FindAsync().ContinueWith(t =>
    {
        IEnumerable<ParseObject> results = t.Result;

        List<ParseObject> resultsList = results.ToList();

        DealWithResults(resultsList, user);

    });
}

public void DealWithResults(List<ParseObject> resultsList, ParseUser me)
{

    userGamesPlayed = resultsList[1].Get<int>("GamesPlayed");
    userHighestCash = resultsList[2].Get<int>("HighestCash");
    userCash = resultsList[3].Get<int>("Cash");

    WelcomeText.text = "Welcome, " + me.Username + "\n" +
                   "Cash: $" + userCash + "\n" +
                   "Highest Cash: $" + userHighestCash + "\n" +
                   "Games Played: " + userGamesPlayed;
}

首先,我尝试从查询内部更改统一ui,但这不起作用,所以我创建了一个外部函数并将结果传递给它,这仍然不起作用?

我尝试使用以下方法调试列表中的内容:

foreach (var res in resultsList)
        {
            Debug.Log("Class Name = " + res.ClassName + "| Keys are: " + res.Keys);
        }

但它返回的全部是:

Class Name = GameScore| Keys are: System.Collections.Generic.Dictionary`2+KeyCollection[System.String,System.Object]

任何人都可以提供任何见解吗?

EDIT2:

好的,首先我找到了结果列表及其内容 http://i.imgur.com/IKcBbey.png

然后,如果我打开它,它似乎是空参考?

http://i.imgur.com/VmSpi9c.png

但如果我去挖掘,我发现我需要的信息一直在这里 http://i.imgur.com/1Wwu5uc.png

现在只需要弄清楚如何获得它?

2 个答案:

答案 0 :(得分:1)

由于只有一组数据,因此始终可以通过resultsList[0]访问。你想要的是:

double cash = (double)resultsList[0]["cash"];
string playerName = (string)resultsList[0]["playerName"];
double highestCash = (double)resultsList[0]["HighestCash"];
int gamesPlayed = (int)resultsList[0]["GamesPlayed"];

虽然您可能想要在尝试取消引用之前检查resultsList是否为空且包含一个元素。

同样,当您的ParseObject似乎是Dictionary时,您可能会发现this MSDN page有用。

答案 1 :(得分:0)

结束解决它......与例子大不相同......

我必须创建一个在回调上调用函数的协程来访问查询之外的变量。

我用

打电话
StartCoroutine(SetupMainScreen(me, DealWithResults));

然后称之为。

public IEnumerator SetupMainScreen(ParseUser user, Action<GameScore> callback)
{



    var query = ParseObject.GetQuery("GameScore").WhereEqualTo("playerName", user.Username).FirstOrDefaultAsync();

    while (!query.IsCompleted)
    {
        yield return null;
    }

    if (query.IsFaulted || query.IsCanceled)
    {
        Debug.Log("Getting of GameScores faulted or cancelled...");
    }
    else
    {
        var obj = query.Result;
        if (obj != null)
            callback(new GameScore(obj.Get<int>("cash"),obj.Get<string>("playerName"),obj.Get<int>("HighestCash"),obj.Get<int>("GamesPlayed")));
    }


}

public void DealWithResults(GameScore gs)
{

    WelcomeText.text = "Welcome, " + gs.Username + "\n" +
                   "Cash: $" + gs.Cash + "\n" +
                   "Highest Cash: $" + gs.HighestCash + "\n" +
                   "Games Played: " + gs.GamesPlayed;
}

我刚刚上课来抓住这些物品。希望这有助于其他人。