Google Api İstemcisi bazen Bağlantılı olarak NULL

GoogleApiClient öğesini aşağıdaki gibi uygularım:

 mGoogleApiClient = new GoogleApiClient.Builder(this)
                .enableAutoManage(this, 0 /* clientId */, this)
                .addApi(LocationServices.API)
                .addApi(Places.GEO_DATA_API)
                .addConnectionCallbacks(this)
                .build();

But in onConnected method I check mGoogleApiClient => value null. In this case I try to re-build googleApiClient but I get error:

  java.lang.IllegalStateException: Already managing a GoogleApiClient with id 0

Lütfen mGoogleApiClient'in neden bağlı olduğu null'un neden NULL olduğunu anlamanıza yardımcı olun: |. (Notlar. Tüm kaynak kodunu kontrol ettim, GoogleApiClient'i asla NULL olarak ayarlamadım).

Teşekkürler!

Güncelle

Oyunumun son sürümünü kullanmaya çalıştıktan sonra problemim çözüldü.

Herkese yardım için teşekkürler.

18
Aynı sorunu yaşıyorum ancak Google play servistiklerini, 8.4.0 son sürümünü kullanıyorum, ancak bu sorun hala devam ediyor
katma yazar neena, kaynak

7 cevap

Bende aynı problem vardı. Tüm bunları çözmek için .enableAutoManage (bu, 0/* clientId * /, this) 'i kaldırmam gerekiyor çünkü bu benim varsaydığımdan düzgün çalışmıyor. Ardından, bu yöntemleri etkinliğinizde geçersiz kılın:

@Override
public void onStart() {
    super.onStart();
    if (mGoogleApiClient != null) {
        mGoogleApiClient.connect();
    }
}

@Override
public void onStop() {
    if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) {
        mGoogleApiClient.disconnect();
    }
    super.onStop();
}

Teknik olarak, .enableAutoManage (bu, 0/* clientId * /, this) 'in yapması gereken şey şu ki, şimdi her şey olması gerektiği gibi çalışıyor.

36
katma
Teşekkürler Benim için çalışıyor.
katma yazar pRaNaY, kaynak

Documentation says: At any given time, only one auto-managed client is allowed per id. To reuse an id you must first call stopAutoManage(FragmentActivity) on the previous client.

Kişisel olarak yaptığım şey, Google Api İstemcisi'ni kullandığım etkinliği terk etmeden önce, feryat yöntemine bir çağrı yapmaktır.

private void stopAutoManage() {
    if (mGoogleApiClient != null)
        mGoogleApiClient.stopAutoManage(mActivity);
}
12
katma
Bu benim için çalışan tek cevaptır. Teşekkürler!
katma yazar Kaizie, kaynak

Bu referansı izlemelisin.

referans sayfası :% 20com.google.android.gms.common.api.GoogleApiClient.OnConnectionFailedListener)

Bu sayfada, clientID zaten otomatik olarak yönetiliyorsa, IllegalStateException yoluyla gösterir. Yani, kodunuzu kontrol edin

                .enableAutoManage(this, 0 /* clientId */, this)

Kodunuzda istisna varsa, tamamlanmadığı gibi sıfırdan dönebileceğini düşünüyorum.

6
katma
Sadece Google API’yı yeniden kurmam gerekirse olur. Ama şu an tamamladım. "onConnected" yöntemi denir. Ancak mGooogleApiClient NULL: | Hata ayıkladım ve çok kontrol ettim. (her zaman mutlu olmaz. Yaklaşık 1/10).
katma yazar quangson91, kaynak
Neden "java.lang.IllegalStateException: Zaten 0 olan bir GoogleApiClient'i yönetme" hatasını görüyorum. MGoogleApiClient'in onConnected yönteminde NULL değerine niçin sahip olduğuyla ilgileniyorum: |, lütfen yardım edin. Teşekkürler
katma yazar quangson91, kaynak

MGoogleApiClient'i yeniden başlatmayı denediğinizde bu sorunla karşılaşıyorsanız

.enableAutoManage (bu, 0/* clientId * /, this)

kullanım

mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addApi(LocationServices.API)
            .addApi(Places.GEO_DATA_API)
            .addConnectionCallbacks(this)
            .build();

ve iyi çalışır

2
katma
mGoogleApiClient = new GoogleApiClient.Builder(getActivity())
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(LocationServices.API)
            .build();

Ben böyle yaptım.

2
katma
Problemi ve cevabınızdaki çözümünüzü, yalnızca eğitmen tarafından tam olarak anlaşılamayan koddan ziyade açıklamayı amaçlamalısınız.
katma yazar gelliott181, kaynak

Bir parçasında aynı sorunu (Zaten bir kimlik ile bir GoogleApiClient yönetme) vardı ve sonunda çözdüm:

  • OnStart() ve onStop normalde geçersiz kıl
  • Bu çağrıyı onStop() içine ekleyin: "yourApiGoogle" .stopAutoManage (context);

İyi günler dilerim...

1
katma

build() calls onConnected immediately if you are already connected. Therefore, your variable might be null.

Daha iyi kullanım

mGoogleApiClient = new GoogleApiClient.Builder(this)
            .enableAutoManage(this, 0 /* clientId */, this)
            .addApi(LocationServices.API)
            .addApi(Places.GEO_DATA_API)
            .addConnectionCallbacks(this);
mGoogleApiClient.build();
0
katma