Java 在Play框架中使用fbconnect模块获取NPE

Java 在Play框架中使用fbconnect模块获取NPE,java,facebook,playframework,Java,Facebook,Playframework,我在尝试使用播放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/

我在尝试使用播放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)
这似乎是它发生的地方:

不幸的是,我对播放模块不够熟悉,无法亲自调试

编辑:作为对评论的回应,我认为fbconnect模块的配置是正确的,因为在日志的前面已经报告了这一点:

13:12:13,225 INFO  ~ Module fbconnect is available (/home/****/play-1.1.1/modules/fbconnect-0.3)

edit2:实际上我已经在本地机器上完成了这一点,但在我的生产服务器上仍然得到了这个NPE。

我看不出插件代码有什么特别的错误。来解释一下发生了什么

// 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应用程序启动并运行了。它非常简单,文档也非常优秀


答案有点冗长,但正如您所说,您不了解模块是如何工作的,我认为这是值得解释的

我采访了在fb connect上工作的程序员之一Regis Bamba

我最终决定改用fbgraph模块,我可能会向任何想使用fb connect的人推荐这个模块,因为它更强大,而且似乎维护得更好。甚至瑞吉斯也建议使用它:-)

无论如何,以下是雷吉斯建议摆脱“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"));
}

谢谢你的反馈。我只是在问题中添加了一些东西,指出日志报告模块可用。FBGraph是FBConnect的替代品吗?您是否使用其他插件?其他插件可能与此插件冲突。只是因为安装了模块(您知道这是因为您的输出,再加上您使用的是FbConnect标记)。是的,FbGraph是一种替代方法。不确定确切的区别,但请查看文档以了解更多信息。它在meNope上运行良好,这是我目前使用的唯一插件:-/