我这里有这个代码:
private Texture profilePic;
public Texture GetProfilePic()
{
FB.API("me/picture?width=100&height=100", HttpMethod.GET, ProfilePicCallback);
return profilePic;
}
private void ProfilePicCallback(IGraphResult result)
{
if (result.Error != null || !FB.IsLoggedIn)
{
Debug.LogError(result.Error);
}
else
{
Debug.Log("FB: Successfully retrieved profile picture!");
profilePic = result.Texture;
}
}
然而不知何故,当我调用GetProfilePic
函数时,即使"成功"它也会返回null。消息已在控制台中打印。我已经正确设置了Facebook ID等等,所以它不可能。这里发生了什么,我该如何解决这个问题?
答案 0 :(得分:0)
所以我找到了解决方案。事实证明,正如CBroe所提到的,我没有正确处理异步请求。
我的新代码现在使用Promise设计模式,类似于在JavaScript中完成的方式(不是UnityScript!)
我使用此处的代码正确实现它:https://github.com/Real-Serious-Games/C-Sharp-Promise
这是我的新代码:
public IPromise<Texture> GetProfilePic()
{
var promise = new Promise<Texture>();
FB.API("me/picture?width=100&height=100", HttpMethod.GET, (IGraphResult result) =>
{
if (result.Error != null || !FB.IsLoggedIn)
{
promise.Reject(new System.Exception(result.Error));
}
else
{
promise.Resolve(result.Texture);
}
});
return promise;
}
然后,以这种方式调用此函数:
GetProfilePic()
.Catch(exception =>
{
Debug.LogException(exception);
})
.Done(texture =>
{
Debug.Log("FB: Successfully retrieved profile picture!");
// Notice that with this method, the texture is now pushed to
// where it's needed. Just change this line here depending on
// what you need to do.
UIManager.Instance.UpdateProfilePic(texture);
});
希望这可以帮助别人!