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:
- Combinación de java y nodejs para la aplicación android
- Desafortunadamente MyApp se ha detenido. ¿Como puedo resolver esto?
- El diálogo de carga de la vista Web de Android no se ha descartado
- ¿Dónde puedo encontrar la ubicación predeterminada para las librerías de claves android creadas por eclipse?
- Encontró un signo más aleatorio, sin error de sintaxis
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
- JmDNS: No se puede resolver el servicio
- Programación de Android - Publicar formulario de Google / Spreedsheet (REQUIRED FIELD)
- Android: ¿Obtener el número de grupos en ExpandableListView?
- Resolver Etiqueta de aplicación para cada tipo de compilación
- Error de importación de Eclipse con Facebook .jar?
- ¿Cómo puedo mantener la estructura de las carpetas cuando comprime en Java?
- ¿Existe un método para vibrar por menos de 1 milisegundo en Android?
- Volley - No se puede resolver el constructor "JSONObjectRequest
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); }