尝试使用Play FBConnect模块时,我收到以下NullPointerException:
Caused by: java.lang.NullPointerException
at tags.fbconnect.FBConnectTags._button(FBConnectTags.java:26)
at tags.fbconnect.FBConnectTags$_button.call(Unknown Source)
at /app/views/main.html.(line:17)
at play.templates.GroovyTemplate.render(GroovyTemplate.java:203)
这似乎是它出现的地方:https://github.com/rbamba/play-fbconnect/blob/master/app/tags/fbconnect/FBConnectTags.java#L26
不幸的是,我对Play模块不太熟悉,无法自行调试。
编辑:为了回应评论,我认为fbconnect模块已正确配置,因为这是在日志的前面报告的:
13:12:13,225 INFO ~ Module fbconnect is available (/home/****/play-1.1.1/modules/fbconnect-0.3)
edit2:我实际上已经让它在我的本地机器上超过这一点,但仍然在我的生产服务器上获得这个NPE。
答案 0 :(得分:0)
我看不出插件代码有什么特别的错误。为了解释一下发生了什么,
// the line of code with the error
String url = Play.plugin(FBConnectPlugin.class).session().getLoginUrl(scope);
让我们稍微打破一下
Play.plugin(FBConnectPlugin.class)
此行要求Play从Play中配置的插件列表中返回已初始化的插件。如果未设置插件,则返回null。这是导致错误的最可能原因。
.session()
这只是从FBConnectPlugin获取会话对象,这是一个静态创建的对象,因此不会为null。
.getLoginUrl(scope);
这会构建URL。不调用此方法,否则您将在堆栈跟踪中看到它。
因此,问题是您没有正确配置插件。再次检查文档以确定它有问题的原因。或者,您可能想要查看FbGraph模块。我几天前安装了这个,并且已经启动并运行了一个Facebook应用程序。它非常简单,文档非常好。
答案有点啰嗦,但正如你所说,你不明白模块是如何工作的,我认为值得解释。
答案 1 :(得分:0)
我和Regis Bamba谈过,他是从事fb-connect工作的程序员之一。
我最终决定使用fbgraph模块,我可能会建议任何想使用fb-connect的人,因为它更强大,似乎更好地维护。即使瑞吉斯建议使用它: - )
无论如何,Regis建议摆脱“java.net.URISyntaxException”:
解决方法是在编码整个字符串之前手动将其替换为编码值。
FBConnectSession.java中的getAuthUrl()函数应为:
public String getAuthUrl(String authCode){
return "https://graph.facebook.com/oauth/access_token?client_id=" +
WS.encode(id)+"&redirect_uri=" +
WS.encode(Router.getFullUrl("FBConnect.callback")) +
"&client_secret="+WS.encode(secret)+"&code="+WS.encode(authCode.replace("|","%7C"));
}