我正在尝试在游戏中实现排行榜。 我写了这段代码:
GoogleApiClient mGoogleApiClient;
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(Drive.API)
.addScope(Drive.SCOPE_FILE)
.build();
mGoogleApiClient.connect();
//....
while(!mGoogleApiClient.isConnected())Log.d("","NO CONNECTED");
Games.Leaderboards.submitScore(mGoogleApiClient, "MY_LEADERBOARD_ID",newscore);
为什么mGoogleApiClient.isConnected()
总是返回false?
EDIT1:好的,现在它可行了(我已将Drive.API
更改为Games.API
而Drive.SCOPE_FILE
更改为Games.SCOPE_GAME
)但是当我调用submitScore()
即使它是{在日志中一切正常,排行榜仍然是空的。如何检查submitScore()
是否真的有效?
EDIT2:我用过
startActivityForResult(Games.Leaderboards.getLeaderboardIntent(mGoogleApiClient, "MY_LEADERBOARD_ID"), REQ_LEADERBOARD);
一切正常!
答案 0 :(得分:4)
您需要向Builder(或GoogleApiClient)添加几个回调侦听器。最可能发生的是登录失败,因为您还没有权限。您需要处理该失败,以便用户可以授权您的应用。
答案 1 :(得分:1)
我发现由于某种原因,虽然 .connect()是异步的,并且在之后立即等待while循环是合乎逻辑的,但显然需要某些原因仍然需要在主UI线程上执行一些操作,因此isConnected()总是返回false,因为while循环实际上是阻塞.connect()。如果我可以猜测为什么我会假设调用.connect()执行一段代码,它将自己置于主UI线程队列中以便稍后执行,并通过在那里循环,你将是永远阻止那段代码执行/连接。