我正在制作此应用,我需要通过Google登录验证用户的电子邮件。
在java.lang.IllegalStateException
方法中获取帐户名称时,我收到了onConnected
!
仅在选择要使用的帐户后才会发生。当它发生时,帐户会被保存但由于错误而无法清除,因此下次不需要询问使用哪个帐户并再次运行。发生错误时,client.isConnected()
和client.isConnecting
都返回false。
这对我没有意义,因为GoogleApiClient
应始终以onConnected
方式连接。我的代码:
@Override
public void onConnected(Bundle bundle){
//connected to Google plus
Log.d(TAG, "onConnected");
mShouldResolve = false;
//get email
//error happens during the getAccountName() call
prefs.edit().putString("email", Plus.AccountApi.getAccountName(googleClient)).apply();
//user needs to select account next time too: for debug purposes
Plus.AccountApi.clearDefaultAccount(googleClient);
//we just needed the email
googleClient.disconnect();
view.findViewById(R.id.loginProgressBar).setVisibility(View.INVISIBLE);
//show "Create new account?"
chooseRegister();
}//onConnected
我知道在client.disconnect()
期间调用onConnected
是不典型的,但错误发生在它之前。
编辑2: 这实际上是一个片段,客户端init如下:
googleClient = new GoogleApiClient.Builder(getActivity())
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(Plus.API)
.addScope(new Scope(Scopes.PROFILE))
.build();
其中getActivity()
是父活动,this
是片段。这会产生影响吗?我应该将父活动作为接口实现者,并将调用重定向到片段吗?
编辑3:尝试使用父活动作为回调的监听器,它也没有帮助。
编辑: 有人会要求它,即使它没有用,所以:错误堆栈跟踪:
java.lang.IllegalStateException: GoogleApiClient must be connected.
com.google.android.gms.common.internal.zzx.zza(Unknown Source)
com.google.android.gms.plus.Plus.zzf(Unknown Source)
com.google.android.gms.internal.zzqe.getAccountName(Unknown Source)
com.myfirm.myproject.LoginFragment.onConnected(LoginFragment.java:148)
com.google.android.gms.common.internal.zzk.zzh(Unknown Source)
com.google.android.gms.internal.zzlg.zznU(Unknown Source)
com.google.android.gms.internal.zzlg.onConnected(Unknown Source)
com.google.android.gms.internal.zzli$2.onConnected(Unknown Source)
com.google.android.gms.common.internal.zzj$zzg.zzpf(Unknown Source)
com.google.android.gms.common.internal.zzj$zza.zzc(Unknown Source)
com.google.android.gms.common.internal.zzj$zza.zzt(Unknown Source)
com.google.android.gms.common.internal.zzj$zzc.zzph(Unknown Source)
com.google.android.gms.common.internal.zzj$zzb.handleMessage(Unknown Source)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6117)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
答案 0 :(得分:0)
之前我遇到过这个错误,也许这个链接可以帮到你:
http://www.androidhive.info/2014/02/android-login-with-google-plus-account-1/
您必须在使用Google Plus API时保持Google客户端连接
答案 1 :(得分:0)
好的,我解决了这个问题:由于某种原因重新创建了片段,因此googleClient也被重新创建,新的片段也没有连接。
逻辑上,这不应该影响其他片段的客户端,但它是一个静态变量。 (实际上不再需要了,忘了改变)
尚不确定,但片段可能已重新创建,因为Google客户端的帐户选择器是片段。因此对于具有相同问题的其他人:多层片段是问题所在。他们经常会感到困惑。