Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

GamesClient not connecting. Error: "Call connect() and wait for onConnected() to be called."

I am trying to use GamesClient to use the leaderboards of the Google Play Game Services. Right now I have it so when the importbutton is clicked, the GamesClient is used to submit some scores. As seen below I get an error saying connect() and wait for onConnectd() to be called.

What am I doing wrong? I see in some tutorials something called a PlusClient. Do I need that in some way? I can provide more code if needed.

It seems that a lot of questions are on StackOverflow about this new Google Play Game Services but there is not a lot of answers out there. Looks like people are still learning -- like myself. :)

LogCat

06-12 00:40:40.173: E/AndroidRuntime(1685): java.lang.IllegalStateException: Not connected. Call connect() and wait for onConnected() to be called.
06-12 00:40:40.173: E/AndroidRuntime(1685):     at com.google.android.gms.internal.p.n(Unknown Source)
06-12 00:40:40.173: E/AndroidRuntime(1685):     at com.google.android.gms.internal.p.o(Unknown Source)
06-12 00:40:40.173: E/AndroidRuntime(1685):     at com.google.android.gms.internal.bj.a(Unknown Source)
06-12 00:40:40.173: E/AndroidRuntime(1685):     at com.google.android.gms.games.GamesClient.submitScore(Unknown Source)
06-12 00:40:40.173: E/AndroidRuntime(1685):     at matt.lyons.bibletrivia.lite.MainMenu$8.onClick(MainMenu.java:173)
06-12 00:40:40.173: E/AndroidRuntime(1685):     at android.view.View.performClick(View.java:4204)
06-12 00:40:40.173: E/AndroidRuntime(1685):     at android.view.View$PerformClick.run(View.java:17355)
06-12 00:40:40.173: E/AndroidRuntime(1685):     at android.os.Handler.handleCallback(Handler.java:725)
06-12 00:40:40.173: E/AndroidRuntime(1685):     at android.os.Handler.dispatchMessage(Handler.java:92)
06-12 00:40:40.173: E/AndroidRuntime(1685):     at android.os.Looper.loop(Looper.java:137)
06-12 00:40:40.173: E/AndroidRuntime(1685):     at android.app.ActivityThread.main(ActivityThread.java:5041)
06-12 00:40:40.173: E/AndroidRuntime(1685):     at java.lang.reflect.Method.invokeNative(Native Method)
06-12 00:40:40.173: E/AndroidRuntime(1685):     at java.lang.reflect.Method.invoke(Method.java:511)
06-12 00:40:40.173: E/AndroidRuntime(1685):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
06-12 00:40:40.173: E/AndroidRuntime(1685):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
06-12 00:40:40.173: E/AndroidRuntime(1685):     at dalvik.system.NativeStart.main(Native Method)

MainMenu.java

public class MainMenu extends BaseGameActivity {

    DatabaseHelper dh;
    GamesClient client;
    Context c;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mainmenu);

        client = getGamesClient();
        client.connect();

        c = this;

        dh = new DatabaseHelper(this);
        dh.openDB();

        importbutton = (Button)findViewById(R.id.importbutton);

        importbutton.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                importScores();
            }
        });
    }

    public void importScores() {

        final Dialog dialog = new Dialog(c);
        dialog.setContentView(R.layout.importlayout);
        dialog.setTitle(R.string.importtitle);

        TextView question = (TextView)dialog.findViewById(R.id.question);       
        Button save = (Button)dialog.findViewById(R.id.save);
        Button scratch = (Button)dialog.findViewById(R.id.scratch);

        question.setText(c.getResources().getString(R.string.importquestion));
        save.setText(c.getResources().getString(R.string.savebtn));
        scratch.setText(c.getResources().getString(R.string.scratchbtn));

        save.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {

                long highestJC = dh.getHighestJC();
                client.submitScore(c.getResources().getString(R.string.leaderboardjc), highestJC);          

                long highestTenC = dh.getHighestTenC();
                client.submitScore(c.getResources().getString(R.string.leaderboardtenc), highestTenC);

                long highestExodus = dh.getHighestExodus();
                client.submitScore(c.getResources().getString(R.string.leaderboardexodus), highestExodus);

                long highestGenesis = dh.getHighestGenesis();
                client.submitScore(c.getResources().getString(R.string.leaderboardgenesis), highestGenesis);

                long highestHolydays = dh.getHighestHolydays();
                client.submitScore(c.getResources().getString(R.string.leaderboardholydays), highestHolydays);

                long highestFacts = dh.getHighestFacts();
                client.submitScore(c.getResources().getString(R.string.leaderboardfacts), highestFacts);

                long highestActs = dh.getHighestActs();
                client.submitScore(c.getResources().getString(R.string.leaderboardacts), highestActs);

                long highestRandom = dh.getHighestRandom();
                client.submitScore(c.getResources().getString(R.string.leaderboardrandom), highestRandom);

                long highestAll = dh.getHighestAll();
                client.submitScore(c.getResources().getString(R.string.leaderboardallcats), highestAll);

                dialog.dismiss();
            }
        });

        scratch.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                dh.deleteAll();
                for(int i = 0; i < 15; i++) {
                    dh.insert(0, 0, "-");
                }
                dialog.dismiss();
                dh.closeDB();
            }
        });

        dialog.show();
    }
}
like image 995
Matt Avatar asked Mar 24 '23 14:03

Matt


1 Answers

If you are using BaseGameActivity, don't call GamesClient.connect(). The advantage of using BaseGameActivity is that it handles all the connection boilerplate for you. All you have to do is override onSignInSucceeded and make your API calls from there. Don't make any games API calls before you get onSignInSucceeded.

Also, remember that when your activity gets an onStop, the games API will be disconnected. After that, when it subsequently gets an onStart, you would again wait for onSignInSucceeded before making any API calls.

like image 145
Bruno Oliveira Avatar answered Apr 06 '23 08:04

Bruno Oliveira