java.lang.RuntimeException与Facebooklogin示例

我正在关注Facebook指南 ,为Android创build一个login应用程序。 后:

  1. 在虚拟设备上安装Facebook应用程序(不必要的)
  2. 将Facebook SDK导入到Android Studio中作为模块
  3. 将以前的模块导入到项目中
  4. 按照指导说的修改代码

该项目编译。 但是当我运行机器并尝试打开应用程序时,它会显示:

不幸的是,应用程序已经停止。

阅读类似这样的post后,我找不到解决scheme。

我使用Android 0.5.8,Oracle JDK 7和API 16作为目标分钟最大

主要文件是activity_main.xmlMainActivity.javaMainFragment.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) 

Solutions Collecting From Web of "java.lang.RuntimeException与Facebooklogin示例"

问题不是来自您的代码,而是来自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包,两者都不是来自你的代码。

为了解决这个问题,你需要完成Android的Facebook 入门教程中的设置,在生成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文件中(可从facebook开发人员帐户的设置页面中find)应用程序ID位于您的Facebook开发人员帐户上。

一旦你完成了它应该编译

 <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/> 

在我的情况下失踪了。

你需要添加

 <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"/> 

在应用程序内部的正确位置不在活动内部