Подтвердить что ты не робот

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)
4b9b3361

Ответ 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"/>

в нужном месте внутри приложения не внутри деятельности