我正在使用 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()
它提供了应用程序上下文来实例化客户端。这会是问题所在吗?
我可以使用活动上下文,但使用它会导致内存泄漏。这里有什么问题以及如何解决?
这给一些用户带来了非常糟糕的体验,他们在打开应用程序并尝试登录后就崩溃了。
您好,您可以尝试这个代码,这是我的项目中的工作代码
首先在创建时初始化 google api 客户端
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)