2016-08-01 68 views
0

我试图实现谷歌API登录,但每次我打开应用程序,即使我没有点击登录按钮,在代码中调用按钮单击并抛出异常,如果(result.isSuccess())结果是null,任何人都知道为什么?谷歌Signin API被称为even按钮没有被按下?

public class Login extends FragmentActivity { 

     private static final int RC_SIGN_IN = 2222; 
     protected void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
             .requestEmail() 
             .build(); 
       mGoogleApiClient = new GoogleApiClient.Builder(getApplicationContext()) 
           .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) 
           .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
           .build();   
       google_Button = (SignInButton) findViewById(R.id.sign_in_button); 
       google_Button.setOnClickListener(this); 
    } 


     public void onClick(View v) { 
       switch (v.getId()) { 
        case R.id.sign_in_button: 
        Log.d("Result: ","click google"); 
        signIn(); 
        break; 

     } 
    } 


     private void signIn() { 
      Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); 
      startActivityForResult(signInIntent, RC_SIGN_IN); 
    } 
     public void onActivityResult(int requestCode, int resultCode, Intent data) { 
      super.onActivityResult(requestCode, resultCode, data); 
      if(requestCode == RC_SIGN_IN) { 
      Log.d("Result: ","google sign in"); 
      GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
      handleSignInResult(result); 
     } 

    } 


     private void handleSignInResult(GoogleSignInResult result) { 

     if (result.isSuccess()) { 
      GoogleSignInAccount acct = result.getSignInAccount(); 
       Log.d("Google token: ",result.getSignInAccount().getEmail()); 
     } else {    
      Log.d("Google","fail"); 
     } 
    } 

回答

0

在你onDestroy()onStop()方法调用此:

if (mGoogleApiClient.isConnected()) { 
     mGoogleApiClient.disconnect(); 
    } 

这是因为有时API客户端不被破坏,会话仍然没有完成。 如果您想注销,请点击您的注销按钮,使用以下代码。

if (mGoogleApiClient.isConnected()) { 

    Plus.AccountApi.clearDefaultAccount(mGoogleApiClient); 

    Plus.AccountApi.revokeAccessAndDisconnect(mGoogleApiClient) 
     .setResultCallback(new ResultCallback<Status>() { 
     @Override 
     public void onResult(Status status) { 
     } 
     }); 
    mGoogleApiClient.disconnect(); 
}