Подтвердить что ты не робот

Редкое исключение NullPointerException в GoogleApiClient с использованием Firebase

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

Но я получаю этот крах на некоторых устройствах каждый день. Когда я тестирую некоторые из моих собственных устройств (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(), который дает контексту приложения для создания экземпляра клиента. Это может быть проблема?

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

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

4b9b3361

Ответ 1

Здравствуйте, Вы можете попробовать этот код, это рабочий код в моем проекте  сначала инициализировать google api client in on create

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

В результатах On Activity только что получил ваш ответ и дескриптор, которые приводят к функции

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

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

 implements GoogleApiClient.OnConnectionFailedListener

Ответ 2

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