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