TabLayout ViewPagerフラグメントを使用してGoogle Signupを統合したいとします。 ViewPagerには、LoginFragmentとRegistrationFragmentの2つのフラグメントがあり、両方に「Google Signup」ボタンが含まれています。TabLayout ViewPagerを使用しているときに「既にID 0のGoogleApiClientを管理しています」というメッセージが表示される
問題は、アクティビティを開始するときに次のエラーが発生することです。
java.lang.IllegalStateException:すでに私は、次のコード
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Configure sign-in to request the user's ID, email address, and basic // profile. ID and basic profile are included in DEFAULT_SIGN_IN. gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .build(); buildGoogleApiClient(); // ..... } private synchronized void buildGoogleApiClient() { /** build_client */ try { mGoogleApiClient = new GoogleApiClient.Builder(getActivity()) .enableAutoManage(getActivity() /* FragmentActivity */, this /* OnConnectionFailedListener */) .addApi(Auth.GOOGLE_SIGN_IN_API, gso) .build(); } catch (Exception e) { e.printStackTrace(); } }
をしようとしている
java.lang.IllegalStateException: Already managing a GoogleApiClient with id 0 at com.google.android.gms.common.internal.zzac.zza(Unknown Source) at com.google.android.gms.internal.zzzt.zza(Unknown Source) at com.google.android.gms.common.api.GoogleApiClient$Builder.zzf(Unknown Source) at com.google.android.gms.common.api.GoogleApiClient$Builder.build(Unknown Source) at com.naturesouq_shopping.fragment.RegistrationFragment.buildGoogleApiClient(RegistrationFragment.java:174) at com.naturesouq_shopping.fragment.RegistrationFragment.getIds(RegistrationFragment.java:140) at com.naturesouq_shopping.fragment.RegistrationFragment.onCreateView(RegistrationFragment.java:85) at android.support.v4.app.Fragment.performCreateView(Fragment.java:2184) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1298) at android.support.v4.app.FragmentManagerImpl.moveFragmentsToInvisible(FragmentManager.java:2323) at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2136) at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2092) at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1969) at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:620) at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:166) at android.support.v4.view.ViewPager.populate(ViewPager.java:1268) at android.support.v4.view.ViewPager.populate(ViewPager.java:1116) at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1642) at android.view.View.measure(View.java:20236)
対数ID 0
完全な誤りでGoogleApiClient を管理および
@Override
public void onStart() {
super.onStart();
if (mGoogleApiClient != null) {
mGoogleApiClient.connect();
}
}
@Override
public void onStop() {
Log.d("GARG", "***** on Stop ***** ");
if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) {
Log.d("GARG", "***** on Stop mGoogleApiClient disconnect ***** ");
mGoogleApiClient.stopAutoManage(getActivity());
mGoogleApiClient.disconnect();
}
super.onStop();
}
Google APIクライアントに接続する別の方法はありますか? 私はどこで間違って正しい方法を行っていますか?
このアプローチの問題はRegistrationFragmentが既に構築され、LoginFragmentで接続されたGoogleApiClientを取得しようとすると、それは静かにただ失敗だろうとmGoogleApiClientを使用して、後でRegistrationFragmentのコードがある場合、それはNPEをスローされますです。 – vlazzle
問題に特化しようとしています。私はOPのコードを勉強したときに、穴があった場所だと信じていました。 – Journey
あなたのコードはOPコードの問題を解決するので良いコードですが、より良いコードでも将来の問題を避けることができます。 – vlazzle