带有 Facebook 登录示例的 java.lang.RuntimeException
Posted
技术标签:
【中文标题】带有 Facebook 登录示例的 java.lang.RuntimeException【英文标题】:java.lang.RuntimeException with Facebook Login example 【发布时间】:2014-07-19 17:37:46 【问题描述】:我正在关注Facebook guide 为android 制作一个登录应用程序。之后:
-
在虚拟设备上安装 Facebook 应用(不需要)
将 Facebook SDK 作为模块导入 Android Studio
将上一个模块导入项目并
按照指南修改代码
项目编译。但是当我运行机器并尝试打开应用程序时,它会崩溃显示:
很遗憾,应用程序已停止。
在阅读了this 和this 之类的类似帖子后,我找不到解决方案。
我使用 Android 0.5.8、Oracle JDK 7 和 API 16 作为 target、min 和 max。
主要文件有activity_main.xml
、MainActivity.java
和MainFragment.java
。
这是最新的 logcat 输出:
05-30 03:15:54.127 647-664/com.jdk8.minifacebookloginapp.app E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:299)
at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)
Caused by: java.lang.NullPointerException
at java.util.concurrent.ConcurrentHashMap.containsKey(ConcurrentHashMap.java:781)
at com.facebook.internal.Utility.queryAppSettings(Utility.java:372)
at com.facebook.widget.LoginButton$1.doInBackground(LoginButton.java:676)
at com.facebook.widget.LoginButton$1.doInBackground(LoginButton.java:673)
at android.os.AsyncTask$2.call(AsyncTask.java:287)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)
【问题讨论】:
【参考方案1】:问题不是来自您的代码,而是来自 facebook SDK。您可以通过查看 NullPointerException 的顶部来判断
Caused by: java.lang.NullPointerException
at java.util.concurrent.ConcurrentHashMap.containsKey(ConcurrentHashMap.java:781)
at com.facebook.internal.Utility.queryAppSettings(Utility.java:372)
最后两个触发行的错误来自 facebook sdk (com.facebook.internal) 和您的 java.util 包,它们都不是来自您的代码。
要解决此问题,您需要在 facebook 的 getting started android 教程中完成设置,在生成 android 密钥哈希后注册您的应用程序。完成后,打开您的 AndroidManifest.xml 并添加 元数据行
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"/>
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
然后将您的 app_id 添加到 strings.xml 文件中(可从 your facebook developer account 的设置页面中找到 应用 ID 在您的 Facebook 开发者帐户中。
完成此操作后,它应该可以编译
【讨论】:
你是对的。但我仍然缺少一些东西。应用程序启动,但是当我单击“登录”按钮时它崩溃了。它给出了this error,但我认为这是另一个问题(我应该创建另一个问题)。这有关系吗? 我用here和here提到的过程解决了之前的错误。 这是我的问题,这解决了它。 :) 这太完美了!为什么在 facebook 开发者页面上从来没有提到过这个? @Todd Anderson 能否提供 facebook 按钮小部件和登录的示例应用程序【参考方案2】:<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
在我的情况下丢失了。
【讨论】:
【参考方案3】:你需要添加
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"/>
在应用程序内部的正确位置而不是在活动内部
【讨论】:
以上是关于带有 Facebook 登录示例的 java.lang.RuntimeException的主要内容,如果未能解决你的问题,请参考以下文章
cordova-plugin-facebook4 - 带有“未登录:您尚未登录。请登录并重试”的空白对话框
如果“SignInWithFacebook”不再可用,我该如何创建一个带有firebase的facebook登录页面?