Facebook Android SDK & java.lang.NullPointerException

J'ai de la difficulté à ouvrir une session facebook active dans mon application Android, selon le tutoriel publié à l' adresse https://developers.facebook.com/docs/android/getting-started/facebook-sdk-for-android/

Je suis en train de lutter avec ça depuis un bon moment maintenant sans chance! Je serais heureux si l'un de vous me pointait dans la bonne direction! ( Je parie que l'erreur est avec une configuration de mon côté, mais je ne peux pas le repérer )

  • Lecture de l'audio html5 dans un navigateur Android
  • Gitignore misc.xml et * .iml avec Android Studio 0.8.9
  • Où le code arrêtera-t-il d'être exécuté lorsque l'application est tuée du gestionnaire de tâches sur Android
  • Erreur JNI: débordement de la table de référence locale 512 entrées
  • Comment supprimer la partie décimale d'un numéro de flotteur qui contient .0 dans java
  • Trouver une liste de toutes les applications Android sur le marché
  • Voici l'erreur que je vois après avoir appelé Session.openActiveSession (ceci, vrai, nouveau Session.StatusCallback () dans le code OnCreate de mon activité (je suis à peu près en suivant les étapes données dans les didacticiels de développeur facevook)


    EDIT: le message d'avertissement suivant est enregistré en premier et suivi du message d'erreur dans la capture d'écran suivante

    09-03 19: 26: 22.726: W / Bundle (17458): clé com.facebook.platform.protocol.PROTOCOL_VERSION chaîne attendue mais valeur était un java.lang.Integer. La valeur par défaut a été renvoyée. 09-03 19: 26: 22.736: W / Bundle (17458): tentative de lancer une exception interne générée: 09-03 19: 26: 22.736: W / Bundle (17458): java.lang.ClassCastException: java.lang.Integer Ne peut pas être jeté sur java.lang.String 09-03 19: 26: 22.736: W / Bundle (17458): à android.os.Bundle.getString (Bundle.java: 1061) 09-03 19: 26: 22.736: W / Bundle (17458): at android.content.Intent.getStringExtra (Intent.java: 4466) 09-03 19: 26: 22.736: W / Bundle (17458): à com.facebook.AuthorizationClient $ KatanaLoginDialogAuthHandler.tryAuthorize (AuthorizationClient. Java: 821) 09-03 19: 26: 22.736: W / Bundle (17458): à com.facebook.AuthorizationClient.tryCurrentHandler (AuthorizationClient.java:272)

    Entrez la description de l'image ici


    09-02 22: 55: 04.110: E / AndroidRuntime (13287): EXCEPTION FATALE: principal 09-02 22: 55: 04.110: E / AndroidRuntime (13287): java.lang.RuntimeException: Impossible de reprendre l'activité {com.good .amrfbintegration / com.facebook.LoginActivity }: java.lang.NullPointerException 09-02 22: 55: 04.110: E / AndroidRuntime (13287): à android.app.ActivityThread.performResumeActivity (ActivityThread.java:3036) 09-02 22 : 55: 04.110: E / AndroidRuntime (13287): à android.app.ActivityThread.handleResumeActivity (ActivityThread.java:3077) 09-02 22: 55: 04.110: E / AndroidRuntime (13287): à android.app.ActivityThread. HandleLaunchActivity (ActivityThread.java:2373)

    Entrez la description de l'image ici

    Voici ce que j'ai fait jusqu'ici

    Mise à jour de l'application sur Facebook avec les informations suivantes (j'ai utilisé le hashkey généré à l'aide du magasin de stockage de débogage de ma machine)

    Entrez la description de l'image ici

    Voici les informations pertinentes de mon fichier manifeste (@ string / app_id est l'identifiant de l'application à partir du portail facebook dev)

    Entrez la description de l'image ici

    J'ai ajouté une référence au SDK de Facebook à mon projet de cette façon

    Entrez la description de l'image ici

    Voici le code dans ma méthode OnCreate de l'activité principale

    @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); activity = this; Session.openActiveSession(this, true, new Session.StatusCallback() { @Override public void call(Session session, SessionState state, Exception exception) { if (session.isOpened()) { Toast.makeText(activity, "Connected to Fb", Toast.LENGTH_SHORT).show(); } }}); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data); } 

    Lors de l'exécution de Session.openActiveSession, logcat affiche l'erreur affichée dans ma première capture d'écran.

    La méthode d'appel Session.StatusCallback () est exécutée une fois (alors que la session a un état 'ouverture'), mais l'application cesse l'heure suivante. Voici ce que je vois avant que l'application échoue

    Entrez la description de l'image ici

    Toute assistance sera grandement appréciée!

  • Les événements de guichet de navigateur Android pour deux robinets en succession rapide
  • Android SwipeRefreshLayout comment implémenter canChildScrollUp si l'enfant n'est pas ListView ou ScrollView
  • Quelle est la différence entre finish () et finishActivity (int requestCode) dans Android
  • GoogleAuthException lors de l'obtention d'un jeton d'accès avec ClientID
  • Ajouter la vue sur le clavier Android
  • Comment lire un flux d'entrée http
  • 6 Solutions collect form web for “Facebook Android SDK & java.lang.NullPointerException”

    Ce problème à cause de Facebook SDK, téléchargez et utilisez Facebook SDK 3.5.2 à partir de cette URL: – https://developers.facebook.com/docs/android/

    Oui. Vérifiez votre code,

    Assurez-vous, vous avez ces choses sur Manifest.xml

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

    Et @ string / app_id doit contenir l'app_id que vous obtenez à partir de vos détails de configuration de l'application Facebook. Aussi, vous devez mettre le clavier correct.

    Alors assurez-vous –

    1. Votre hash clé est correct
    2. Vous avez correctement configuré l'application sur le Web, et faites en sorte que l'identifiant de l'application soit configuré dans votre application.

    Cela m'est également arrivé aujourd'hui.

    Mon problème était que l'application Facebook était en mode sandbox. Donc, seuls les développeurs et testeurs pourraient l'utiliser.

    Changez-le de la page de propriétés Facebook Developer de votre application: https://developers.facebook.com/apps

    J'ai également trouvé ma réponse ici: impossible d'accéder à la session Facebook – UnknownError: application invalide

     // Just write your code in onResume() rather than onCreate(). @Override public void onResume() { super.onResume(); if(Session.getActiveSession()==null){ session = new Session(this); Session.setActiveSession(session); } if (Session.getActiveSession().isOpened()) { Toast.makeText(activity, "Connected to Fb", Toast.LENGTH_SHORT).show(); }else{ Session.openActiveSession(this, true, new Session.StatusCallback() { @Override public void call(Session session, SessionState state, Exception exception) { if (session.isOpened()) { Toast.makeText(activity, "Connected to Fb", Toast.LENGTH_SHORT).show(); } }}); } } } 

    J'ai creusé un peu dans le SDK (3.5) et il semble que EXTRA_PROTOCOL_VERSION soit toujours stocké en tant que nombre entier non comme chaîne. C'est-à-dire dans NativeProtocol.java:

      public static Intent createPlatformActivityIntent(Context context, String action, int version, Bundle extras) { Intent intent = new Intent() .setAction(INTENT_ACTION_PLATFORM_ACTIVITY) .setPackage(FACEBOOK_PACKAGE) .addCategory(Intent.CATEGORY_DEFAULT) .putExtras(extras) .putExtra(EXTRA_PROTOCOL_VERSION, version) //version --> int .putExtra(EXTRA_PROTOCOL_ACTION, action); return validateKatanaActivityIntent(context, intent); } public static Intent createPlatformServiceIntent(Context context) { Intent intent = new Intent(INTENT_ACTION_PLATFORM_SERVICE) .setPackage(FACEBOOK_PACKAGE) .addCategory(Intent.CATEGORY_DEFAULT); return validateKatanaServiceIntent(context, intent); } public static Intent createLoginDialog20121101Intent(Context context, String applicationId, ArrayList<String> permissions, String audience) { Intent intent = new Intent() .setAction(INTENT_ACTION_PLATFORM_ACTIVITY) .setPackage(FACEBOOK_PACKAGE) .addCategory(Intent.CATEGORY_DEFAULT) .putExtra(EXTRA_PROTOCOL_VERSION, PROTOCOL_VERSION_20121101) // PROTOCOL_VERSION_20121101 --> int .putExtra(EXTRA_PROTOCOL_ACTION, ACTION_LOGIN_DIALOG) .putExtra(EXTRA_APPLICATION_ID, applicationId) .putStringArrayListExtra(EXTRA_PERMISSIONS, ensureDefaultPermissions(permissions)) .putExtra(EXTRA_PROTOCOL_CALL_ID, generateCallId()) .putExtra(EXTRA_WRITE_PRIVACY, ensureDefaultAudience(audience)); return validateKatanaActivityIntent(context, intent); } 

    Et à l'endroit où les développeurs obtiennent généralement cette erreur est lue comme une chaîne (AutorizationClient.java l: 820):

     addLoggingExtra(EVENT_EXTRAS_PROTOCOL_VERSION, intent.getStringExtra(NativeProtocol.EXTRA_PROTOCOL_VERSION)); 

    Cela ne fonctionnera en aucun cas, donc c'est toujours un bug dans le SDK. C'est simplement que, dans certaines circonstances, ce segment est exécuté.

    Des commentaires?

    J'avais la même erreur, google'd beaucoup de choses et enfin c'est ce que j'ai fait pour m'éloigner de cette erreur

      private void getHashKey() { PackageInfo info; try { info = getPackageManager().getPackageInfo("Your_Package_Name", PackageManager.GET_SIGNATURES); for (Signature signature : info.signatures) {MessageDigest md; md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); //String something = new String(Base64.encode(md.digest(), 0)); String something = new String(Base64.encode(md.digest(),0)); Log.e("** Hash Key", something); } } catch (NameNotFoundException e1) { Log.e("name not found", e1.toString()); } catch (NoSuchAlgorithmException e) { Log.e("no such an algorithm", e.toString()); } catch (Exception e){ Log.e("exception", e.toString()); } } 

    Donc, j'ai utilisé la clé Hash générée par ce code et l'ai mis à jour dans ma console de développeur de Facebook. Cela a résolu mon problème. Peut-être, certains problèmes avec Windows Key_gen ou la clé de l'image Android

    Et vérifiez également votre fichier AuthorizationClient.java de Facebook Sdk à la ligne 820

     addLoggingExtra(EVENT_EXTRAS_PROTOCOL_VERSION,"" + intent.getIntExtra(NativeProtocol.EXTRA_PROTOCOL_VERSION, 0)); 

    Je l'ai fait pour " getIntExtra ", où ils l'ont eu comme " getStringExtra ". Faire ces changements, a travaillé pour moi. J'espère que ça va fonctionner pour toi aussi.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.