web-dev-qa-db-fra.com

exemple java.lang.RuntimeException avec un login Facebook

Je suis le Guide Facebook pour créer une application de connexion pour Android. Après:

  1. Installer l'application Facebook (inutile) sur le périphérique virtuel
  2. Importer le Kit de développement logiciel Facebook dans Android Studio en tant que module
  3. Importer le module précédent dans le projet et
  4. Modifier le code comme indiqué dans le guide 

le projet compile. Mais lorsque je lance la machine et que je tente d’ouvrir l’application, il se bloque en montrant:

Malheureusement, l'application s'est arrêtée.

Je ne pouvais pas trouver une solution après avoir lu des articles similaires comme this et this .

J'utilise Android 0.5.8, Oracle JDK 7 et l'API 16 comme target , min et max .

Les fichiers principaux sont activity_main.xml , MainActivity.Java et MainFragment.Java .

Voici le dernier logcat output:

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)
26
Lucio

Le problème ne vient pas de votre code mais du kit de développement logiciel facebook. Vous pouvez le savoir en regardant en haut de l’exception NullPointerException

Caused by: Java.lang.NullPointerException
        at Java.util.concurrent.ConcurrentHashMap.containsKey(ConcurrentHashMap.Java:781)
        at com.facebook.internal.Utility.queryAppSettings(Utility.Java:372)

Les deux dernières lignes de déclenchement de l'erreur proviennent du sdk de facebook (com.facebook.internal) et de votre package Java.util, qui ne font pas partie de votre code.

Pour résoudre ce problème, vous devez terminer la configuration du tutoriel mise en route de Facebook pour Android où vous enregistrez votre application après avoir généré un hachage de clé Android. Ensuite, ouvrez votre fichier AndroidManifest.xml et ajoutez la ligne méta-données  

<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>

Ajoutez ensuite votre app_id dans le fichier strings.xml (disponible dans la page des paramètres de votre compte développeur Facebook } _ . L'ID de l'application se trouve sur votre compte développeur Facebook.

Une fois que vous avez fait cela, il devrait compiler

70
Todd Anderson
<meta-data Android:name="com.facebook.sdk.ApplicationId" Android:value="@string/facebook_app_id"/>

était manquant dans mon cas.

3
Vihaan Verma

Vous devez ajouter 

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

au bon endroit dans l'application pas dans l'activité

0
user5138430