我已设法存储数据,但我无法检索它,如果有人可以帮助我至少获得一个示例工作,我将非常感激。
首先我在用户注册时存储数据:
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
现在只需要弄清楚如何获得它?
答案 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;
}
我刚刚上课来抓住这些物品。希望这有助于其他人。