我正在製作此應用程序,需要使用Google登錄驗證用戶的電子郵件。java.lang.IllegalStateException:必須連接GoogleApiClient
我收到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: 這實際上是在一個片段,並且客戶端初始化如下:
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)
「LoginFragment.googleClient」可能無法連接..我不確定,這是一個猜測..有兩個googleClient? – fatboy
只有一個,當從別處複製行時,忘記了'LoginFragment.'。編輯它。 – Perdex