J'essaie d'implémenter la connexion Facebook pour Android à l'aide du kit de développement logiciel (SDK) de Facebook (3.17.1), mais je rencontre des problèmes que je n'ai pas rencontrés dans le passé ... Tout d'abord, le bouton de connexion ne s'affiche pas complètement. C'est ce que je reçois
au lieu de cela:
(remarquez le logo Facebook manquant). Lorsque je lance l'application, dans la fraction de seconde qui s'écoule avant son arrêt, elle l'affiche exactement comme il se doit (avec le logo de Facebook).
Lorsque l'application se bloque, je reçois ce message d'erreur
"Unfortunately, FacebookLoginTest as stopped"
et ceci dans Logcat:
08-12 22:19:08.751: E/AndroidRuntime(7731): FATAL EXCEPTION: AsyncTask #1
08-12 22:19:08.751: E/AndroidRuntime(7731): Process: com.example.facebooklogintest, PID: 7731
08-12 22:19:08.751: E/AndroidRuntime(7731): Java.lang.RuntimeException: An error occured while executing doInBackground()
08-12 22:19:08.751: E/AndroidRuntime(7731): at Android.os.AsyncTask$3.done(AsyncTask.Java:300)
08-12 22:19:08.751: E/AndroidRuntime(7731): at Java.util.concurrent.FutureTask.finishCompletion(FutureTask.Java:355)
08-12 22:19:08.751: E/AndroidRuntime(7731): at Java.util.concurrent.FutureTask.setException(FutureTask.Java:222)
08-12 22:19:08.751: E/AndroidRuntime(7731): at Java.util.concurrent.FutureTask.run(FutureTask.Java:242)
08-12 22:19:08.751: E/AndroidRuntime(7731): at Android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.Java:231)
08-12 22:19:08.751: E/AndroidRuntime(7731): at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1112)
08-12 22:19:08.751: E/AndroidRuntime(7731): at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:587)
08-12 22:19:08.751: E/AndroidRuntime(7731): at Java.lang.Thread.run(Thread.Java:864)
08-12 22:19:08.751: E/AndroidRuntime(7731): Caused by: Java.lang.NullPointerException
08-12 22:19:08.751: E/AndroidRuntime(7731): at Java.util.concurrent.ConcurrentHashMap.containsKey(ConcurrentHashMap.Java:911)
08-12 22:19:08.751: E/AndroidRuntime(7731): at com.facebook.internal.Utility.queryAppSettings(Utility.Java:377)
08-12 22:19:08.751: E/AndroidRuntime(7731): at com.facebook.widget.LoginButton$1.doInBackground(LoginButton.Java:677)
08-12 22:19:08.751: E/AndroidRuntime(7731): at com.facebook.widget.LoginButton$1.doInBackground(LoginButton.Java:1)
08-12 22:19:08.751: E/AndroidRuntime(7731): at Android.os.AsyncTask$2.call(AsyncTask.Java:288)
08-12 22:19:08.751: E/AndroidRuntime(7731): at Java.util.concurrent.FutureTask.run(FutureTask.Java:237)
08-12 22:19:08.751: E/AndroidRuntime(7731): ... 4 more
08-12 22:19:10.753: D/Process(7731): killProcess, pid=7731
08-12 22:19:10.753: D/Process(7731): com.Android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException:131 Java.lang.ThreadGroup.uncaughtException:693 Java.lang.ThreadGroup.uncaughtException:690
J'ai suivi les instructions pour ajouter une connexion Facebook aux applications Android:
En plus de cela, je n’ai rien changé dans mon activité et mon manifeste . J’ai essayé cela dans trois versions différentes d’Eclipse, toutes avec la même erreur, mais j’ai ensuite supprimé le code du bouton de connexion Facebook dans le fichier .xml, app lance très bien. Je ne sais pas ce que je suis censé faire d'autre . Voici les codes MainActivity et Layout.xml:
MainActivity.Java
package com.example.facebooklogintest;
import Android.support.v7.app.ActionBarActivity;
import Android.os.Bundle;
import Android.view.Menu;
import Android.view.MenuItem;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
activity_main.xml
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.facebooklogintest.MainActivity" >
<com.facebook.widget.LoginButton
Android:id="@+id/authButton"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentLeft="true"
Android:layout_alignParentRight="true"
Android:layout_gravity="center_horizontal"
Android:layout_marginTop="30dp" />
</RelativeLayout>
Vous devez modifier ou ajouter ceci dans votre fichier manifeste
<activity
Android:name="com.example.LoginActivity"
Android:label="@string/app_name"
Android:parentActivityName="com.example.MainActivity" >
</activity>
<activity Android:name="com.facebook.LoginActivity"
Android:theme="@Android:style/Theme.Translucent.NoTitleBar"
Android:label="@string/app_name" />
<meta-data Android:name="com.facebook.sdk.ApplicationId" Android:value="@string/app_id"/>
Je ne peux pas en accepter le mérite, tout le mérite doit aller au type qui a posté la réponse ici Je ne fais qu'ajouter le code simplement pour vous faciliter la tâche et parce que quelqu'un qui avait précédemment supprimé la réponse me l'a dit.
10-10 11:27:47.932: E/AndroidRuntime(25915): FATAL EXCEPTION: AsyncTask #5
10-10 11:27:47.932: E/AndroidRuntime(25915): Process: com.example.version_2, PID: 25915
10-10 11:27:47.932: E/AndroidRuntime(25915): Java.lang.NullPointerException: Attempt to invoke virtual method 'int Java.lang.Object.hashCode()' on a null object reference
10-10 11:27:47.932: E/AndroidRuntime(25915): at Java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.Java:746)
10-10 11:27:47.932: E/AndroidRuntime(25915): at Java.util.concurrent.ConcurrentHashMap.containsKey(ConcurrentHashMap.Java:774)
10-10 11:27:47.932: E/AndroidRuntime(25915): at com.facebook.internal.Utility.queryAppSettings(Utility.Java:822)
10-10 11:27:47.932: E/AndroidRuntime(25915): at com.facebook.login.widget.LoginButton$1.run(LoginButton.Java:489)
Si vous rencontrez l'erreur ci-dessus dans l'intégration du bloc fonctionnel, la solution ci-dessous fonctionnera. Ajoutez simplement l'ID de l'application dans la balise Meta-data du fichier de manifeste. Ça fonctionnera bien
<meta-data Android:name="com.facebook.sdk.ApplicationId" Android:value="@string/app_id"/>