我不熟悉 SO 用户标签,所以我希望这可行:@aaron
这是我能找到的与我的问题最接近的问题,但这并不是问题所在。(我尝试了 Google、Bing 和 SO 自己的搜索。) https://stackoverflow.com/questions/25014006/nullreferenceexception-with-parseobjects-in-array-of-pointers
我的问题:我有一个与 Facebook 和 Parse 交互的 Unity Web-Player 游戏。在解决了其中的许多问题后,我将它轻松连接到 Facebook,提取用户的个人资料信息和图片。然后它尝试连接到 parse 以将用户登录到 parse 以检索他们的游戏相关数据(如高分、货币统计、电源等),当它尝试这样做时,我得到一个 NullReferenceException。报错信息的具体内容为:
“NullReferenceException:对象引用未设置为 GameStateController.ParseFBConnect (System.String userId, System.String accessToken, DateTime tokenExpiration) [0x0001a] 在 C:...\Assets\Scripts\CSharp\CharacterScripts\GameStateController 中的对象实例.cs:1581 at GameStateController.Update () [0x0011f] 在 C:\Users\Michieal\Desktop\Dragon Rush Game\Assets\Scripts\CSharp\CharacterScripts\GameStateController.cs:382"
生成此错误消息的代码是:
public void ParseFBConnect(string userId, string accessToken, DateTime tokenExpiration)
{
Task<ParseUser> logInTask = ParseFacebookUtils.LogInAsync (userId, accessToken, tokenExpiration).ContinueWith<ParseUser> (t =>
{
if (t.IsFaulted || t.IsCanceled)
{
if (t.IsCanceled)
Util.LogError ("LoginTask::ParseUser:: Cancelled. >.<");
// The login failed. Check the error to see why.
Util.LogError ("Error Result: " + t.Result.ToString ());
Util.LogError ("Error Result (msg): " + t.Exception.Message);
Util.LogError ("Error Result (inmsg): " + t.Exception.InnerException.Message);
}
if (t.IsCompleted)
{ // No need to link the user to a FB account, as there are no "real" (non fb) accounts yet.
Util.Log ("PFBC::Login result reports successful. You Go Gurl!");
// Login was successful.
user = t.Result; // assign the resultant user to our "user"...
RetryPFBC = false;
return user;
}
return t.Result;
});
if (user.ContainsKey ("NotNew"))
{ // on true, then we don't have to set up the keys...
Util.Log ("User, " + user.Username + ", contains NotNew Key.");
}
else
{
CreateKeys (); // Create Keys will only build MISSING Keys, setting them to the default data specifications.
user.Email = Email;
user.SaveAsync (); // if we have created the keys data, save it out.
}
}
它正在按该顺序传递正确的(经过身份验证的)Facebook 值(FB.UserId、FB.AccessToken、FB.AccessTokenExpiresAt)。我正在使用 FB Sdk 6.0.0 版和 Parse Unity SDK 1.2.16 版。
在日志文件中,它没有任何 debug.log/Util.log 注释,而是执行“空引用”错误(上图),然后是“关于解析 url:https ://api.parse.com/1 /classes/_User
检查是否https://api.parse.com/1/classes/_User是否为有效域
针对有效域检查请求主机:api.parse.com:*"
这就是它刚刚停止的地方。因此,我在 Update() 函数中构建了一个简单的重试块,以每隔 10 秒左右调用一次 ParseFBConnect() 函数。其中,似乎只会用相同的错误集填充我的日志文件。在互联网上搜索帮助后,我尝试将 FB.AccessTokenExpiresAt 更改为 DateTime.UtcNow.AddDays(1),因为其他人说这对他们有用。我似乎无法为我工作。当我在 Parse 中检查仪表板以查看它是否显示任何更新或活动时,它没有,而且现在已经有几天没有了。脚本执行顺序如下:
Parse.ParseInitialzeBehaviour -- -2875(第一件事)Facebook 加载程序(FB、编辑器、画布等) -- -1000 到 -900 GameStateController -- -875 ... 所以,我知道 Parse.ParseInitializeBehaviour 正在加载首先(另一个搜索结果),我通过更改登录方法的存储位置将 NullReference 跟踪到 Parse.Unity.dll;GSC 在播放器上(播放器从初始屏幕开始并在整个游戏中保持不变)。我还尝试将 Parse.ParseInitializeBehaviour 放在 Player 游戏对象和一个空的游戏对象上(上面有一个简单的 dontdestroy(gameObject) 脚本)。而且,我在对象上正确填写了我的应用程序 ID 和我的 DotNet 密钥。
当我第一次设置解析时,在游戏的当前生产版本上,它可以根据上面的代码片段成功创建一个用户帐户。现在,它只是在尝试解析 url 时中断......
所以,我的问题是:我做错了什么?还有其他人有这个问题吗?有没有人有任何想法/建议/等等,如何解决这个问题?我真的只是想让它工作,并让用户登录,这样我就可以获取他们的数据并继续在我的游戏中破坏其他东西:D
感谢所有帮助!感谢您抽出宝贵时间阅读本文。