首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GoogleSignInAccount不能为空

GoogleSignInAccount不能为空
EN

Stack Overflow用户
提问于 2020-02-22 21:45:54
回答 1查看 821关注 0票数 1

我正在尝试通过游戏服务在我的游戏商店里实现我的游戏的领导板。

我很难实现这一点。我不是专家。我将补充说,游戏是用HTML,CSS,javascript。我已经在控制台中生成了主板ID。我无法解决以下错误:

我忘记补充说,这个游戏目前正在通过Android studio调试器通过一部连接到USB计算机的电话进行测试。

错误:

代码语言:javascript
复制
java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.example.pudzibreak/com.example.pudzibreak.MainActivity}:
java.lang.NullPointerException: GoogleSignInAccount must not be null

MainActivity

代码语言:javascript
复制
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();
    }



};
EN

回答 1

Stack Overflow用户

发布于 2020-02-22 21:53:05

Games.getLeaderboardsClient(this, GoogleSignIn.getLastSignedInAccount(this));

在onCreate中调用并导致您的崩溃。

GoogleSignIn.getLastSignedInAccount(this)返回null。

如果没有“最后登录”,则必须返回null。

你可以试试这个:

代码语言:javascript
复制
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.");
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60357133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档