java.lang.RuntimeException:无法启动活动ComponentInfo:java.lang.IllegalStateException:GoogleApiClient尚未连接

时间:2016-05-12 17:53:09

标签: android google-account

我正在尝试为我的应用实施Google登录和注销。注销似乎给出了以下错误;                                                                                java.lang.RuntimeException:无法启动活动ComponentInfo:java.lang.IllegalStateException:GoogleApiClient尚未连接。

LogoutActivity:

public class LogoutActivity_new extends AppCompatActivity implements
    GoogleApiClient.OnConnectionFailedListener{
private GoogleApiClient mGoogleApiClient;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
   // SocialLogin.signOut();

   // GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN);

    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
           .addApi(Auth.GOOGLE_SIGN_IN_API)
            .build();
    signOut();

}

private void signOut() {
    Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(
            new ResultCallback<Status>() {
                @Override
                public void onResult(Status status) {
                    // [START_EXCLUDE]
                    //updateUI(false);
                    // [END_EXCLUDE]
                }
            });
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {

}
}

请帮助人

2 个答案:

答案 0 :(得分:0)

您可能需要首先在mGoogleApiClient上调用connect方法并等到它连接后才能调用signOut。这样做的好地方是onResume方法

答案 1 :(得分:0)

您无法在创建mGoogleApiClient后调用signout(),因为您不知道客户端是否已经连接(这几乎是不可能的,因为代码执行速度很快)。

当您知道客户端已将自身连接到googleApi时,您可以使用此方法,例如,当调用onConnected()时,

示例:

@Override
void OnConnected(Bundle bundle)
{
    signout();
}

当客户端连接自己时,googleApi会调用OnConnected()。

您还可以设置一些布尔字段,例如&#39; connected&#39;在OnConnected方法中为true,然后您可以在代码中的其他位置检查它以调用signout(),如:

if(connected) signout();