Java.lang.RuntimeException с примером для входа в Facebook
Я слежу за Facebook guide, чтобы сделать приложение для входа в Android. После того, как:
- Установите приложение Facebook (не обязательно) на виртуальном устройстве.
- Импорт Facebook SDK в Android Studio в качестве модуля
- Импортировать предыдущий модуль в проект и
- Измените код, как говорится в руководстве
выполняется компиляция проекта. Но когда я запускаю машину и пытаюсь открыть приложение, оно показывает:
К сожалению, приложение остановилось.
Я не смог найти решение после прочтения подобных сообщений, таких как this и .
Я использую Android 0.5.8, Oracle JDK 7 и API 16 как целевые, минимальные и максимальные.
Основные файлы 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 начало работы в руководстве для 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
Идентификатор приложения находится в вашей учетной записи разработчика 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"/>
в нужном месте внутри приложения не внутри деятельности