De profil.getCurrentProfile() renvoie la valeur null après la connexion (API FB v4.0)
Pour quelque raison Profile.getCurrentProfile()
affiche la valeur null à la fois à droite après la connexion à FaceBook, à l'aide de FB API v4.0.
C'est la cause de problèmes pour moi, dans mon application, car je ne peux pas afficher mon prochain Activity
avec Profile
être null.
La raison pour laquelle je dis que c'est nul, parfois, c'est parce que si j'ai près de mon application et l'ouvrir de nouveau, je suis en mesure d'obtenir pour mon prochain Activity
, mais si je ne suis pas déjà connecté, et puis connectez-vous, Profile
est null. Il semble que c'est pour une courte période.
Est-il de contourner ou résoudre à cela?
- Êtes-vous sûr que vous avez mis en œuvre profiletracker?
- Ah que c'était ce dont j'avais besoin! Merci beaucoup!
- mon erreur a été de l'appeler avant la connexion
- ce qui s'est passé avec moi, mon erreur a été de l'appeler avant la connexion
Vous devez vous connecter pour publier un commentaire.
Comme Hardy dit, vous devez créer une instance de
ProfileTracker
qui va commencer le suivi des mises à jour de profil, (j'.eProfileTracker.onCurrentProfileChanged()
sera appelée lorsque le profil de l'utilisateur finitions être récupérées).Voici le code complet que vous aurez besoin pour vous connecter à FB et obtenir le profil de l'utilisateur:
Vous devez remplacer votre Activité ou d'un Fragment de la
onActivityResult()
comme ci-dessous:Edit:
Code mis à jour avec Alex Zezekalo la suggestion de seulement appeler
mProfileTracker.startTracking();
siProfile.getCurrentProfile()
renvoie la valeur null.FacebookSdk.sdkInitialize(context); LoginManager.getInstance().logOut();
avant de faire cette demande de connexion (comme dans cette réponse, pas liés l'un). Il vous sera plus élégant des solutions pour le bien.ProfileTracker
elle-même appellestartTracking()
. Je vais ajouter un commentaire pour la bonne chose, cependant.Suite à Sufian réponse, vous pouvez également enregistrer le nouveau profil de Profil de classe:
stopTracking()
avantProfile.setCurrentProfile()
, il commencerait une boucle infinie.Profile.getCurrentProfile()
retour le même objet que les paramcurrentProfile
? Je veux dire,setCurrentProfile()
semble inutile ici. Ne pensez-vous pas?Profile profile1 = Profile.getCurrentProfile();
à l'intérieur deonCurrentProfileChanged()
, il est revenu me la non-null objet de profil. Me semble qu'il n'est pas nécessaire de le faire dans FB SDK v4.5.0.oldProfile
était nul maiscurrentProfile
était le même queProfile.getCurrentProfile()
.Facebook charge le profil de l'information de manière asynchrone, même après que vous obtenez votre résultat du compte de connexion de rappel, de Profil.getCurrentProfile() renvoie la valeur null.
Cependant, chaque fois que l'utilisateur se connecte par le biais de Facebook (la première fois, puis tous les temps) à son profil va changer et va déclencher la profiletracker. C'est là que vous devez appeler le profil.
Voici comment vous devez structurer votre code. Vous devez écouter l'ProfileTracker de mise à jour afin de mettre à jour vos propriétés de l'utilisateur, - éviter d'appeler getCurrentProfile à l'extérieur de l'tracker pendant le processus d'ouverture de session:
La clé ici est que vous ne devez pas appeler Profil.getcurrentprofile de la connexion de rappel (soit LoginManager,registercallback ou loginButton.registercallback) - les valeurs ne sont pas fiables. Mis en place le dispositif de suivi et de compter sur elle de tir au moment opportun afin d'obtenir les mises à jour d'information de profil.
J'ai une simple suggestion que les autres réponses ici.
Il est pas besoin pour enregistrer un nom de connexion de rappel avec:
Au lieu de cela, chaque fois que vous avez besoin de données de l'utilisateur (comme sur le bouton de la souris) - démarrer le suivi des modifications de profil avec:
Et puis commencer le Facebook processus d'ouverture de session par:
Pour le code ci-dessus fonctionne, bien sûr, vous devez préparer les trucs habituels dans votre Activité:
Aussi ne pas oublier de modifier le AndroidManifest.xml fichier.