我正在尝试通过游戏服务在我的游戏商店里实现我的游戏的领导板。
我很难实现这一点。我不是专家。我将补充说,游戏是用HTML,CSS,javascript。我已经在控制台中生成了主板ID。我无法解决以下错误:
我忘记补充说,这个游戏目前正在通过Android studio调试器通过一部连接到USB计算机的电话进行测试。
错误:
java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.example.pudzibreak/com.example.pudzibreak.MainActivity}:
java.lang.NullPointerException: GoogleSignInAccount must not be nullMainActivity
package com.example.pudzibreak;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.gms.auth.api.Auth;
import com.google.android.gms.auth.api.signin.GoogleSignIn;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.auth.api.signin.GoogleSignInClient;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.auth.api.signin.GoogleSignInResult;
import com.google.android.gms.games.Games;
import com.google.android.gms.games.LeaderboardsClient;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.android.gms.common.SignInButton;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private static final String TAG = "XD";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SignInButton signInButton = findViewById(R.id.sign_in_button);
signInButton.setSize(SignInButton.SIZE_STANDARD);
findViewById(R.id.sign_in_button).setOnClickListener(this);
WebView WebView= (WebView) findViewById(R.id.webView);
WebView.getSettings().setJavaScriptEnabled(true);
WebView.loadUrl("file:///android_asset/myHtml.html");
signInSilently();
Games.getLeaderboardsClient(this, GoogleSignIn.getLastSignedInAccount(this));
}
private void signInSilently(){
GoogleSignInOptions signInOptions = GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN;
GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
if (GoogleSignIn.hasPermissions(account, signInOptions.getScopeArray())) {
GoogleSignInAccount signedInAccount = account;
} else {
GoogleSignInClient signInClient = GoogleSignIn.getClient(this, signInOptions);
signInClient
.silentSignIn()
.addOnCompleteListener(
this,
new OnCompleteListener<GoogleSignInAccount>() {
@Override
public void onComplete(@NonNull Task<GoogleSignInAccount> task) {
if (task.isSuccessful()) {
GoogleSignInAccount signedInAccount = task.getResult();
} else {
// do something
}
}
});
}
}
@Override
public void onClick(View view) {
if (view.getId() == R.id.sign_in_button) {
startSignInIntent();
}
}
private static final int RC_LEADERBOARD_UI = 9004;
private void showLeaderboard() {
Games.getLeaderboardsClient(this, GoogleSignIn.getLastSignedInAccount(this))
.getLeaderboardIntent("XXXXXXXXXXXXXXX")
.addOnSuccessListener(new OnSuccessListener<Intent>() {
@Override
public void onSuccess(Intent intent) {
startActivityForResult(intent, RC_LEADERBOARD_UI);
}
});
}
private static final int RC_SIGN_IN = 900;
private void startSignInIntent() {
GoogleSignInClient signInClient = GoogleSignIn.getClient(this,
GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN);
Intent intent = signInClient.getSignInIntent();
startActivityForResult(intent, RC_SIGN_IN);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_SIGN_IN) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
if (result.isSuccess()) {
// The signed in account is stored in the result.
GoogleSignInAccount signedInAccount = result.getSignInAccount();
} else {
String message = result.getStatus().getStatusMessage();
if (message == null || message.isEmpty()) {
message = "XXX";
}
new AlertDialog.Builder(this).setMessage(message)
.setNeutralButton(android.R.string.ok, null).show();
}
}
showLeaderboard();
}
};发布于 2020-02-22 21:53:05
Games.getLeaderboardsClient(this, GoogleSignIn.getLastSignedInAccount(this));
在onCreate中调用并导致您的崩溃。
GoogleSignIn.getLastSignedInAccount(this)返回null。
如果没有“最后登录”,则必须返回null。
你可以试试这个:
GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this)
if(account != null) {
Log.d("TUT", "getting leaderboard client");
Games.getLeaderboardsClient(this, account);
} else {
Log.e("TUT", "no last sign in. Not getting leaderboard client.");
}https://stackoverflow.com/questions/60357133
复制相似问题