2016-08-14 2 views
1

Es ist das erste Mal, dass ich mit einer Google API arbeite, da ich ziemlich neu in der Android-Programmierung bin. Ich habe versucht, Google Play Game-Dienste zu implementieren und Bestenlisten in meiner App anzuzeigen (es ist ein Spiel, wie Sie vielleicht erraten haben), und hatte einige Schwierigkeiten mit der Google-Dokumentation zu folgen.Implementierung von Google Play Game Services - So können Benutzer sich anmelden

Ich habe einen Button gesetzt und möchte den Benutzer sich anmelden lassen, wenn er angetippt wird, und den Benutzer angemeldet lassen, bis er sich danach abmeldet. Ich habe dies im Anschluss an die Dokumentation programmiert:

public class MainActivity extends AppCompatActivity implements View.OnClickListener, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { 

    Button bLeaderboard; 

    private GoogleApiClient mGoogleApiClient; 

    private static int RC_SIGN_IN = 9001; 

    private boolean mResolvingConnectionFailure = false; 
    private boolean mAutoStartSignInflow = true; 
    private boolean mSignInClicked = false; 


@Override 
@SuppressLint("NewApi") 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    bLeaderboard = (Button) findViewById(R.id.bLeaderboard); 
    bLeaderboard.setOnClickListener(this); 

    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .addApi(Games.API).addScope(Games.SCOPE_GAMES) 
      .build(); 
} 

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 

     case R.id.bLeaderboard: 

      mSignInClicked = true; 
      mGoogleApiClient.connect(); 
} 

} 

Das Problem ist, dass, wenn ich die App stürzt auf der Rang Taste tippen und ich bekomme diese Fehlermeldung:

Android Runtime: FATAL AUSNAHME: Haupt Prozess : com.example.game, PID: 26284 java.lang.IllegalStateException: Ein schwerwiegender Entwicklerfehler ist aufgetreten. Überprüfen Sie die Protokolle für weitere Informationen. bei com.google.android.gms.common.internal.zzd $ zza.zzc (Unbekannte Quelle) bei com.google.android.gms.common.internal.zzd $ zza.zzv (Unbekannte Quelle) bei com. google.android.gms.common.internal.zzd $ zze.zzasf (Unbekannte Quelle) bei com.google.android.gms.common.internal.zzd $ zzd.handleMessage (Unbekannte Quelle) bei android.os.Handler. dispatchMessage (Handler.java:102) bei android.os.Looper.loop (Looper.java:148) bei android.app.ActivityThread.main (ActivityThread.java:5417) bei java.lang.reflect.Method. Rufen Sie (native Methode) bei com.andro auf id.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616)

ich auch nicht in der Lage gewesen, verstehen, was mit diesen drei implementierten Methoden zu tun:

@Override 
public void onConnected(@Nullable Bundle bundle) { 
} 

@Override 
public void onConnectionSuspended(int i) { 
} 

@Override 
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 

} 

Jede Hilfe wird sehr geschätzt, da ich nicht in der Lage gewesen, alle Tutorials auf diese Ausnahme für die google-Dokumentation zu finden, die wie ich bereits sagte, ich kämpfen, um zu begreifen, und Folgen.

Antwort

1

Dies funktioniert für mich richtig

public class MainActivity extends ActionBarActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { 

// Client used to interact with Google APIs 
private GoogleApiClient mGoogleApiClient; 
private static int RC_SIGN_IN = 9001; 

private boolean mResolvingConnectionFailure = false; 
private boolean mAutoStartSignInflow = true; 
private boolean mSignInClicked = false; 
GameHelper gameHelper; 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 


    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .addApi(Games.API).addScope(Games.SCOPE_GAMES) 
      .build(); 
    gameHelper = new GameHelper(this, GameHelper.CLIENT_GAMES); 
    gameHelper.enableDebugLog(true); 
    gameHelper.setup(new GameHelper.GameHelperListener() { 
     @Override 
     public void onSignInFailed() { 
     Toast.makeText(getApplicationContext(),"Please Check Your Internet Connection!",Toast.LENGTH_LONG).show(); 
     } 

     @Override 
     public void onSignInSucceeded() { 
      Toast.makeText(getApplicationContext(),"Signed in Succeed",Toast.LENGTH_LONG).show(); 
     } 
    }); 



    setContentView(view); 

    //for load all Score card 



    scorecard=(Button)findViewById(R.id.score_card); 
    scorecard.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 


      startActivityForResult(Games.Leaderboards.getAllLeaderboardsIntent(mGoogleApiClient), 1); 

     } 
    }); 





} 
private boolean isScoreResultValid(final Leaderboards.LoadPlayerScoreResult scoreResult) { 
    return scoreResult != null && GamesStatusCodes.STATUS_OK == scoreResult.getStatus().getStatusCode() && scoreResult.getScore() != null; 
} 



@Override 
protected void onStart() { 
    super.onStart(); 
    mGoogleApiClient.connect(); 
} 

@Override 
protected void onStop() { 
    super.onStop(); 
    mGoogleApiClient.disconnect(); 
} 

@Override 
public void onConnected(Bundle connectionHint) { 
    // The player is signed in. Hide the sign-in button and allow the 
    // player to proceed. 
    // now submit your high_score 
    Games.Leaderboards.submitScore(mGoogleApiClient,getResources().getString(R.string.leaderboard_easy),high_score); 

} 

@Override 
public void onConnectionFailed(ConnectionResult connectionResult) { 
    if (mResolvingConnectionFailure) { 
     // already resolving 
     return; 
    } 

    // if the sign-in button was clicked or if auto sign-in is enabled, 
    // launch the sign-in flow 
    if (mSignInClicked || mAutoStartSignInflow) { 
     mAutoStartSignInflow = false; 
     mSignInClicked = false; 
     mResolvingConnectionFailure = true; 

     // Attempt to resolve the connection failure using BaseGameUtils. 
     // The R.string.signin_other_error value should reference a generic 
     // error string in your strings.xml file, such as "There was 
     // an issue with sign-in, please try again later." 
     /*if (!BaseGameUtils.resolveConnectionFailure(this, 
       mGoogleApiClient, connectionResult, 
       RC_SIGN_IN, "Sign in error")) { 
      mResolvingConnectionFailure = false; 
     }*/ 
    } 

    // Put code here to display the sign-in button 
} 

@Override 
public void onConnectionSuspended(int i) { 
    // Attempt to reconnect 
    mGoogleApiClient.connect(); 
} 



protected void onActivityResult(int requestCode, int resultCode, 
           Intent intent) { 
    if (requestCode == RC_SIGN_IN) { 
     mSignInClicked = false; 
     mResolvingConnectionFailure = false; 
     if (resultCode == RESULT_OK) { 
      mGoogleApiClient.connect(); 
     } else { 
      // Bring up an error dialog to alert the user that sign-in 
      // failed. The R.string.signin_failure should reference an error 
      // string in your strings.xml file that tells the user they 
      // could not be signed in, such as "Unable to sign in." 
      BaseGameUtils.showActivityResultError(this, 
        requestCode, resultCode, R.string.signin_failure); 
     } 
    } 
} 
// Call when the sign-in button is clicked 
private void signInClicked() { 
    mSignInClicked = true; 
    mGoogleApiClient.connect(); 
} 

// Call when the sign-out button is clicked 
private void signOutclicked() { 
    mSignInClicked = false; 
    Games.signOut(mGoogleApiClient); 
} 

} 
+0

auch die E-Mail-ID des Testers in Google Spiel Service-Konsole spielen Angemeldet erklären .. –

Verwandte Themen