13

Я использую GoogleApiClient для входа в систему с помощью учетной записи Google. В основном, я использую Firebase Auth с Google.Rare NullPointerException в GoogleApiClient с использованием Firebase

Но я получаю этот сбой на некоторых устройствах каждый день. Когда я тестирую некоторые из своих устройств (OnePlus 3, Nexus 5X, Moto G и т. Д.), Я никогда не вижу этого сбоя.

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) 

Это то, что я делаю, чтобы создать экземпляр GoogleApiClient. Я не вижу аварии в нормальных ситуациях, но в некоторых устройствах я это вижу. Вот что я делаю в коде,

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(); 

Что я здесь делаю неправильно? Мой лучший выбор: App.getContext(), который дает контекст приложения для создания экземпляра клиента. Это может быть проблема?

Я могу использовать контекст активности, но использование этого приводит к утечке памяти. В чем проблема и как ее можно решить?

Это создает очень плохой опыт для некоторых пользователей, которые получают аварию сразу после открытия приложения и пытаюсь петь.

+0

Вы решили это? –

+0

Вы пытались использовать метод 'getApplicationContext()' вместо 'App.getContext()'? Это также происходит, если вы используете '.requestIdToken (getString (R.string.default_web_client_id))'? –

+0

@AlexMamo попробовал 'getApplicationContext' не повезло –

ответ

1

Привет Вы можете попробовать этот код это рабочий код в моем проекте первой инициализации апи клиент Google в создании на

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(); 
} 

и на кнопку мыши вызвать другую функцию

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

в о деятельности результат только что получил свой ответ и обрабатывать этот результат в функции

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

реализовать этот интерфейс в вашей деятельности

implements GoogleApiClient.OnConnectionFailedListener 
+0

Я уже сделал то, что вы предлагаете, но он разбился на 'mGoogleApiClient = новый GoogleApiClient.Builder (это)' –

+0

вы можете опубликовать журнал ошибок –

+0

Вы можете увидеть в моем вопросе здесь Http: // StackOverflow.com/questions/43864774/googlesigninoptions-googleapiclient-bind-service-serviceconnection-crash –

-1

Во время проверки на Google Play услуги будет хорошо, я думаю, что это может быть из-за к устройство, имеющее старую версию сервисов Google Play. Но это не большая ошибка.

+0

На устройстве службы Google Play обновлены. –

Смежные вопросы