web-dev-qa-db-fra.com

Identifiant Facebook NullPointerException

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

enter image description here

au lieu de cela:

enter image description here

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

  1. Sdk Facebook importé
  2. Ajout du projet Facebook comme libray
  3. Ajout du projet Facebook à la liste des références de mon projet
  4. Nettoyé et même redémarré le projet.

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>
9
ojonugwa ochalifu

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.

20
apmartin1991
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"/>
0
Ashutoshg