Android: Google reproduce los servicios de juegos error de conexión (java.lang.IllegalStateException: GoogleApiClient debe estar conectado.)

He programado un juego para Android, todo funciona bien, pero ahora quiero que mi aplicación tenga Google Play Services (tablas de clasificación y achivments). He utilizado el código de ejemplo de Google para iniciar sesión en los servicios de Google (no hay errores en el script), pero cada vez que quiero conectar con mi aplicación en depuración maode, obtengo este error:

6-29 11:48:29.391 23779-23779/com.JFKGames.theepicbutton E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.JFKGames.theepicbutton, PID: 23779 java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=9001, result=10004, data=null} to activity {com.JFKGames.theepicbutton/com.JFKGames.theepicbutton.MainActivity}: java.lang.IllegalStateException: GoogleApiClient must be connected. at android.app.ActivityThread.deliverResults(ActivityThread.java:3446) at android.app.ActivityThread.handleSendResult(ActivityThread.java:3489) at android.app.ActivityThread.access$1300(ActivityThread.java:139) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1258) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5102) 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:785) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.IllegalStateException: GoogleApiClient must be connected. at com.google.android.gms.internal.fq.a(Unknown Source) at com.google.android.gms.games.Games.c(Unknown Source) at com.google.android.gms.games.internal.api.LeaderboardsImpl.submitScore(Unknown Source) at com.google.android.gms.games.internal.api.LeaderboardsImpl.submitScore(Unknown Source) at com.JFKGames.theepicbutton.MainActivity.onActivityResult(MainActivity.java:79) at android.app.Activity.dispatchActivityResult(Activity.java:5446) at android.app.ActivityThread.deliverResults(ActivityThread.java:3442)             at android.app.ActivityThread.handleSendResult(ActivityThread.java:3489)             at android.app.ActivityThread.access$1300(ActivityThread.java:139)             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1258)             at android.os.Handler.dispatchMessage(Handler.java:102)             at android.os.Looper.loop(Looper.java:136)             at android.app.ActivityThread.main(ActivityThread.java:5102)             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:785)             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)             at dalvik.system.NativeStart.main(Native Method) 

Y la aplicación se bloquea. Aquí está mi código para MainActivity donde quiero que se conecte:

 public class MainActivity extends BaseGameActivity implements GameHelper.GameHelperListener, View.OnClickListener { public static int REQUEST_LEADERBOARD = 1002; boolean mExplicitSignOut = false; boolean mInSignInFlow = false; GoogleApiClient mClient() { return null; } @Override protected void onCreate(Bundle savedInstanceState) { setRequestedClients(BaseGameActivity.CLIENT_GAMES | BaseGameActivity.CLIENT_APPSTATE); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = (Button)findViewById(R.id.startbutton); button.setOnClickListener (this); Button highscorebutton = (Button)findViewById(R.id.highscorebutton); highscorebutton.setOnClickListener(this); findViewById(R.id.sign_in_button).setOnClickListener(this); findViewById(R.id.sign_out_button).setOnClickListener(this); } public void onClick(View view) { if(view.getId()==R.id.startbutton) { startActivityForResult(new Intent(this, buttonActivity.class), 1); } else if(view.getId()==R.id.highscorebutton) { startActivityForResult(Games.Leaderboards.getLeaderboardIntent(getApiClient(), getString(R.string.the_best_players)),REQUEST_LEADERBOARD); } else if (view.getId() == R.id.sign_in_button) { // start the asynchronous sign in flow beginUserInitiatedSignIn(); } else if (view.getId() == R.id.sign_out_button) { // sign out. signOut(); // show sign-in button, hide the sign-out button findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE); findViewById(R.id.sign_out_button).setVisibility(View.GONE); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { Games.Leaderboards.submitScore(getApiClient(), getString(R.string.the_best_players), resultCode); if(requestCode==1) { if(resultCode > leseHighscore()) { schreibeHighscore(resultCode); } } } @Override public void onSignInFailed() { findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE); findViewById(R.id.sign_out_button).setVisibility(View.GONE); } @Override public void onSignInSucceeded() { View a = findViewById(R.id.highscorebutton); a.setVisibility(View.VISIBLE); View b = findViewById(R.id.button3); b.setVisibility(View.VISIBLE); findViewById(R.id.sign_in_button).setVisibility(View.GONE); findViewById(R.id.sign_out_button).setVisibility(View.VISIBLE); } } 

Gracias, GoogleWelt

Según la documentación oficial , "Antes de que se ejecute cualquier operación, el GoogleApiClient debe estar conectado"

Cuando el usuario no está conectado (firmado) y hace clic para mostrar tablas de clasificación o logros, resulta en la excepción lanzada. Modifique su código para lanzar la tabla de clasificación de la siguiente manera:

 } else if(view.getId()==R.id.highscorebutton) { if (isSignedIn()) startActivityForResult(Games.Leaderboards.getLeaderboardIntent(getApiClient(), getString(R.string.the_best_players)), REQUEST_LEADERBOARD); else showAlert("Please sign in to view leaderboards"); } 

Utilice la misma lógica para mostrar los logros:

  if (isSignedIn()) startActivityForResult(Games.Achievements.getAchievementsIntent(getApiClient()), REQUEST_ACHIEVEMENT); else showAlert("Please sign in to view achievements"); 

Compruebe la parte donde obtiene ApiClient, es decir, getApiClient (). Escribe el siguiente código para ver si GoogleApiClient está conectado o no.

  GoogleApiClient mGoogleApiClient; if(mGoogleApiClient.isConnected()){ // good }else{ //connect it mGoogleApiClient.connect(GoogleApiClient.SIGN_IN_MODE_OPTIONAL); } 
  • Números al azar
  • Explorador abierto de Android del servicio evitando múltiples pestañas
  • Usando get () y put () para acceder a valores de píxeles en OpenCV para Java
  • InputStream no recibe EOF
  • ¿Cuál es la diferencia entre pasar este vs ClassName.this de un controlador de eventos cuando se pasa a constructor de Intent?
  • Permiso de Android denegado al leer / proc / self / exe de un hilo no principal
  • Intención de elegir entre la cámara o la galería en Android
  • Cómo instanciar un oyente por reflexión en Android
  • Exportación y ejecución del proyecto Unity3D a Android Studio
  • ¿Cómo aceptar cadenas aproximadamente correctas como correctas, al comparar?
  • Diseño de filas ListView de Android ignorando el relleno
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.