"GoogleApiClient ist nicht verbunden noch" Ausnahme in der Besetzung Anwendung
Ich bin die Entwicklung einer Android-Anwendung, die wirft Inhalte zu Chromecast.
Manchmal in meinem com.google.android.gms.common.api.GoogleApiClient.ConnectionCallbacks
Umsetzung in der onConnected
Methode, bekomme ich eine
java.lang.IllegalStateException: GoogleApiClient is not connected yet.
Ausnahme.
Hier ist der stack trace:
FATAL EXCEPTION: main
Process: com.joaomgcd.autocast, PID: 13771
java.lang.IllegalStateException: GoogleApiClient is not connected yet.
at com.google.android.gms.internal.eg.a(Unknown Source)
at com.google.android.gms.common.api.GoogleApiClient.b(Unknown Source)
at com.google.android.gms.cast.Cast$CastApi$a.launchApplication(Unknown Source)
at com.joaomgcd.autocast.media.MediaConnectionCallbacks.onConnected(MediaConnectionCallbacks.java:37)
at com.google.android.gms.internal.dx.b(Unknown Source)
at com.google.android.gms.common.api.GoogleApiClient.bn(Unknown Source)
at com.google.android.gms.common.api.GoogleApiClient.f(Unknown Source)
at com.google.android.gms.common.api.GoogleApiClient$2.onConnected(Unknown Source)
at com.google.android.gms.internal.dx.b(Unknown Source)
at com.google.android.gms.internal.dx.bT(Unknown Source)
at com.google.android.gms.internal.dw$h.b(Unknown Source)
at com.google.android.gms.internal.dw$h.b(Unknown Source)
at com.google.android.gms.internal.dw$b.bR(Unknown Source)
at com.google.android.gms.internal.dw$a.handleMessage(Unknown Source)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
Dies scheint nur zu passieren, wenn ich hatte bereits verbunden ist, GoogleApiClient vor und bin im Anschluss für ein zweites mal. Zwischen die 2 Anrufe die ich trennen Sie es von der api-client mit dem code unten.
Meine Vermutung ist, dass dies ein Fehler ist. Bin ich richtig? Da bin ich in der onConnected
Methode, die GoogleApiClient sollte bereits angeschlossen sein.
Was kann ich tun, um zu bekommen? Soll ich einfach eine Weile warten, bis die GoogleApiClient wirklich angeschlossen?
Ich Tue dies in einem service-und hier sind die relevanten bits:
wenn der Dienst gestartet wird:
mMediaRouter.addCallback(mMediaRouteSelector, mediaCallback, MediaRouter.CALLBACK_FLAG_PERFORM_ACTIVE_SCAN);
mediaCallback hat diesen code:
@Override
public void onRouteAdded(MediaRouter router, RouteInfo route) {
super.onRouteAdded(router, route);
if (route.getDescription().equals("Chromecast")) {
...
mSelectedDevice = com.google.android.gms.cast.CastDevice.getFromBundle(route.getExtras());
...
castClientListener = new CastListener(context, apiClient);
Cast.CastOptions.Builder apiOptionsBuilder = Cast.CastOptions.builder(mSelectedDevice, castClientListener);
...
apiClient.set(new GoogleApiClient.Builder(context).addApi(Cast.API, apiOptionsBuilder.build()).addConnectionCallbacks(connectionCallback).addOnConnectionFailedListener(new MediaConnectionFailedListener(context)).build());
apiClient.get().connect();
}
}
connectionCallback hat diesen code:
@Override
public void onConnected(final Bundle arg0) {
...
Cast.CastApi.launchApplication(apiClient, UtilAutoCast.CHROMECAST_APP_ID, false).setResultCallback(connectionCallback);
...
}
Den code oben ist der Teil, wo der crash passiert.
Und wenn ich den Dienst beenden ich diesen code ausführen:
if (mMediaRouter != null) {
mMediaRouter.removeCallback(mediaCallback);
mMediaRouter = null;
}
if (apiClient != null) {
Cast.CastApi.stopApplication(apiClient);
if (apiClient.isConnected()) {
apiClient.disconnect();
apiClient = null;
}
}
Vielen Dank im Voraus.
Anschluss für ein zweites mal? Sie haben getrennt von der ersten? Benötigen Sie mehr code aus Ihrer Seite, um zu sehen, was passiert.
Bitte zeigen Sie uns, wo Sie eine Verbindung herstellen GoogleApiClient...
InformationsquelleAutor joaomgcd | 2014-02-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Google-APIs für Android > GoogleApiClient
Die Umsetzung der
GoogleApiClient
erscheint, konzipiert für nur eine einzige Instanz. Es ist am besten zu instanziieren, die es nur einmal inonCreate
, führen Sie dann die verbindungen und Trennungen, die single-Instanz.Ich würde vermuten, dass nur ein
GoogleApiClient
werden können, die tatsächlich angeschlossen werden, aber mehrere Instanzen erhalten dieonConnected
Rückruf.In Ihrem Fall ist es wahrscheinlich gut, um nicht nenne
connect
imonStart
, aber nur inonRouteAdded
.Ich denke, dieses Problem ist sehr ähnlich zu Fatal Exception: java.lang.IllegalStateException GoogleApiClient ist nicht verbunden noch
InformationsquelleAutor mattm
Haben, Sie deklarieren folgenden
<meta>
tagIch vergaß zu schreiben, so kann man auch stecken mit diesem Grund.
Danke.
InformationsquelleAutor Pratik Butani
Vom showcase-app (Googlecast Github-Beispiel CastHelloText-android ) Empfänger-app gestartet onRouteSelected (nicht onRouteAdded wie du tust in deinem code). Ich würde versuchen, das zu ändern. Falls es nicht funktioniert, würde ich hinzufügen log-Zeilen in jeder Methode, im Zusammenhang mit dem Anschluss & session, und sehen, was passiert ist.
Anderen Tipp: ich hatte Absturz, beenden der Anwendung (bei chromecast Gerät physisch angeschlossen aus macht). Lösung ist
Cast.CastApi.stopApplication(apiClient);
innenif (apiClient.isConnected())
.InformationsquelleAutor Drez
Scheint es, wie, die Sie anrufen GoogleApiClient, bevor es angeschlossen ist
verschieben Sie diese Zeile in die onCreate()
Hoffe es hilft dir.
InformationsquelleAutor Deepak