13

J'utilise GoogleApiClient pour connecter les utilisateurs utilisant leur compte Google. Fondamentalement, j'utilise Firebase Auth avec connexion Google.Rare NullPointerException dans GoogleApiClient utilisant Firebase

Mais je reçois cette panne sur certains appareils tous les jours. Lorsque je fais des tests sur certains de mes appareils (OnePlus 3, Nexus 5X, Moto G, etc.), je ne vois jamais ce crash.

Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.toLowerCase(java.util.Locale)' on a null object reference 
     at com.google.android.gms.internal.zzamy.zzd(Unknown Source) 
     at com.google.android.gms.internal.zzamv.n(Unknown Source) 
     at com.google.android.gms.internal.zzamv.zza(Unknown Source) 
     at com.google.android.gms.internal.zzamv$2.run(Unknown Source) 
     at java.lang.Thread.run(Thread.java:818) 

C'est ce que je fais pour instancier le GoogleApiClient. Je ne vois pas l'accident dans des situations normales, mais dans certains appareils, je vois cela. Voici ce que je fais dans le code,

String mClientId = parcel.getProviderExtra().getString(CLIENT_ID_KEY); 
GoogleSignInOptions googleSignInOptions; 

googleSignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
       .requestIdToken(mClientId) 
       .requestEmail() 
       .build(); 

mGoogleApiClient = new GoogleApiClient.Builder(App.getContext()) 
       .addApi(Auth.GOOGLE_SIGN_IN_API, googleSignInOptions) 
       .build(); 

mGoogleApiClient.connect(); 

Qu'est-ce que je fais mal ici? Mon meilleur pari est, App.getContext() qui donne le contexte d'application pour instancier le client. Cela peut-il être le problème?

Je peux utiliser le contexte d'activité, mais l'utilisation de cette méthode entraîne une fuite de mémoire. Quel est le problème ici et comment peut-il être résolu?

Cela crée une très mauvaise expérience à certains utilisateurs qui obtiennent un accident juste après l'ouverture de l'application et d'essayer de chanter.

+0

Avez-vous résolu ceci? –

+0

Avez-vous essayé d'utiliser la méthode 'getApplicationContext()' à la place de 'App.getContext()'? Est-ce que cela se passe aussi si vous utilisez '.requestIdToken (getString (R.string.default_web_client_id))'? –

+0

@AlexMamo a essayé 'getApplicationContext' sans aucune chance –

Répondre

1

Bonjour Vous pouvez tester ce code c'est un code de travail dans mon projet premier initialize client google api dans le créer

public void initGPlus() { 
    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
      .requestEmail() 
      .build(); 
    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) 
      .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
      .build(); 
} 

et sur le bouton cliquez sur appeler une autre fonction

Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); 
    startActivityForResult(signInIntent, RC_SIGN_IN); 

sur des activités résultat juste obtenu votre réponse et de gérer ce résultat dans une fonction

if (requestCode == RC_SIGN_IN) { 
     GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
     handleSignInResult(result); 
    } 

implémenter cette interface dans votre activité

implements GoogleApiClient.OnConnectionFailedListener 
+0

J'ai déjà fait comme vous le suggérez mais il s'est écrasé à 'mGoogleApiClient = new GoogleApiClient.Builder (this)' –

+0

pouvez-vous poster le journal des erreurs –

+0

Vous pouvez voir dans ma question ici http: // stackoverflow.com/questions/43864774/googlesigninoptions-googleapiclient-bind-service-serviceconnection-crash –

-1

Lors de la vérification de services Google Play serait bon, je pense que cela peut être dû à un appareil ayant une ancienne version des services Google Play. mais ce n'est pas une grande erreur indépendamment.

+0

Sur l'appareil, les services Google Play sont à jour. –