我跟随Facebook guide制作Android登录应用。后:
项目编译。但是当我运行机器并尝试打开应用程序时,它崩溃了:
不幸的是,应用程序已停止。
我使用Android 0.5.8,Oracle JDK 7和API 16作为目标, min 和 max 。< / p>
主要文件为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)
答案 0 :(得分:70)
问题不是来自您的代码,而是来自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密钥哈希后注册你的应用程序。完成后,打开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位于您的脸书开发者帐户中。
完成后,应编译
答案 1 :(得分:3)
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
在我的案例中失踪了。
答案 2 :(得分:0)
您需要添加
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"/>
在应用程序内的正确位置,而不是活动