Je suis le Guide Facebook pour créer une application de connexion pour Android. Après:
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)
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
<meta-data Android:name="com.facebook.sdk.ApplicationId" Android:value="@string/facebook_app_id"/>
était manquant dans mon cas.
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é