2014-06-29 33 views
8

Android için bir oyun programladım, her şey iyi çalışıyor, ancak şimdi Google'ın Google Play oyunlarını oynaması için uygulamamı istiyorum afişler ve başarılar).Android: Google oyun hizmetleri hizmetleri bağlantı hatası (java.lang.IllegalStateException: GoogleApiClient bağlanmalıdır.)

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) 

Ve Uygulama çöker: Google hizmetlerine (komut hata) giriş yapmak için Google örnek kod kullanılır, ancak her i ayıklama Maode benim App ile bağlanmak istediğiniz, bu hatası alıyorum . official documentation göre

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); 




    } 

} 

Teşekkür,

cevap

3

GoogleWelt

zaman "Herhangi operasyon, GoogleApiClient bağlanmalıdır yürütüldüğünde Önce",: Burada ben bağlamak istiyorum MainActivity benim kod kullanıcı bağlanmadı (oturum açtı) ve skor tablolarını veya başarılarını göstermek için tıklamalar, bu durum istisna ile sonuçlanır. Böyle afiş başlatılması için kodunuzu değiştirin:

} 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"); 

} 

gösteren başarıları için aynı mantık kullanın:

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

sen ApiClient yani getApiClient alıyorsanız bölümünü kontrol edin(). GoogleApiClient'in Bağlantılı olup olmadığını görmek için aşağıdaki kodu yazın.

GoogleApiClient mGoogleApiClient; 
    if(mGoogleApiClient.isConnected()){ 
    // good 
    }else{ 
    //connect it 
    mGoogleApiClient.connect(GoogleApiClient.SIGN_IN_MODE_OPTIONAL); 
    } 
İlgili konular