成功登录Google+后退出登录

时间:2014-01-02 03:37:39

标签: android google-plus

这是一个很长的问题,可能会令人困惑,请耐心等待。 所以我按照developers.google.com网站上的说明成功为我的Android应用创建了Google+登录,并成功签署了用户。这是我主要活动的代码。

//..imports
@SuppressWarnings("unused")

public class MainActivity extends Activity implements
    ConnectionCallbacks, OnConnectionFailedListener, View.OnClickListener  {

private static final int REQUEST_CODE_RESOLVE_ERR = 9000;
private static final String TAG = "MainActivity";

private ProgressDialog mConnectionProgressDialog;
private static PlusClient mPlusClient;
private ConnectionResult mConnectionResult;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mPlusClient = new PlusClient.Builder(this, this, this)
            .setActions("http://schemas.google.com/AddActivity", "http://schemas.google.com/BuyActivity")
            .setScopes(Scopes.PLUS_LOGIN)  // recommended login scope for social features
                    // .setScopes("profile")       // alternative basic login scope
            .build();
    // Progress bar to be displayed if the connection failure is not resolved.
    mConnectionProgressDialog = new ProgressDialog(this);
    mConnectionProgressDialog.setMessage("Signing in...");
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    findViewById(R.id.sign_in_button).setOnClickListener(this);
     return true;
}

protected void onStart() {
    super.onStart();
    mPlusClient.connect();
}

protected void onStop() {
    super.onStop();
    mPlusClient.disconnect();
}
public PlusClient getMplusClient() {
    return mPlusClient;
}
@Override
public void onConnectionFailed(ConnectionResult result) {
    if (mConnectionProgressDialog.isShowing()) {
        // The user clicked the sign-in button already. Start to resolve
        // connection errors. Wait until onConnected() to dismiss the
        // connection dialog.
        if (result.hasResolution()) {
            try {
                result.startResolutionForResult(this, REQUEST_CODE_RESOLVE_ERR);
            } catch (SendIntentException e) {
                mPlusClient.connect();
            }
        }
    }

    // Save the intent so that we can start an activity when the user clicks
    // the sign-in button.
    mConnectionResult = result;
}




protected void onActivityResult(int requestCode, int responseCode, Intent intent) {
    if (requestCode == REQUEST_CODE_RESOLVE_ERR && responseCode == RESULT_OK) {
        mConnectionResult = null;
        mPlusClient.connect();
    }
}

public void onConnected(Bundle connectionHint) {
    String accountName = mPlusClient.getAccountName();
    Toast.makeText(this, accountName + " is connected.", Toast.LENGTH_LONG).show();
    startActivity(new Intent(this, TestActivity.class));
}



public void onDisconnected() {
    Log.d(TAG, "disconnected");
}
public void startTestActivity() {
    startActivity(new Intent(this, TestActivity.class));
}

@Override
public void onClick(View view) {

    if (view.getId() == R.id.sign_in_button && !mPlusClient.isConnected()) {
        if (mConnectionResult == null) {
            mConnectionProgressDialog.show();
        } else {
            try {
                mConnectionResult.startResolutionForResult(this, REQUEST_CODE_RESOLVE_ERR);
            } catch (SendIntentException e) {
                // Try connecting again.
                mConnectionResult = null;
                mPlusClient.connect();
            } } } }

}//end of class

`

现在我在我的项目中添加了一个名为TestActivity的新活动,其中我有代码从应用程序中签署用户。此TestActivity是从MainActivity开始的块

 public void onConnected(Bundle connectionHint) {
    String accountName = mPlusClient.getAccountName();
    Toast.makeText(this, accountName + " is connected.", Toast.LENGTH_LONG).show();
    startActivity(new Intent(this, TestActivity.class));
}

这很好用,当用户连接到应用程序时启动TestActivity,当我再次运行应用程序时,这是活动看到的(因为用户仍然登录)。

现在,问题是logout类中的TestActivity按钮无法执行任何操作.Google的Sign Out方法

public void onClick(View view) {
if (view.getId() == R.id.sign_out_button) {
    if (mPlusClient.isConnected()) {
        mPlusClient.clearDefaultAccount();
        mPlusClient.disconnect();
        mPlusClient.connect();
    }
}
}

由于mPlusClient位于MainActivity且声明为private,我添加了您在getMPlusCLient()中看到的MainActivity方法(我认为这是我的问题开始了,它返回mPlusClient,一个PlusClient个对象。现在,我最终得到了TestActivity

public class TestActivity extends Activity implements View.OnClickListener{

private Button sign_out_button;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.test, menu);

    sign_out_button = (Button)findViewById(R.id.signOutButton);

    sign_out_button.setOnClickListener(this);

    return true;
}
public void signOut() {
    MainActivity signOutObject = new MainActivity();
    if (signOutObject.getMplusClient().isConnected()) {
        signOutObject.getMplusClient().clearDefaultAccount();
        signOutObject.getMplusClient().disconnect();
        signOutObject.getMplusClient().connect();
    }


}

@Override
public void onClick(View view) {
    switch(view.getId()) {

    case R.id.signOutButton:
        signOut();
        break;
    }

}

    }

我之前说过的问题是logout类中的TestActivity按钮没有做任何事情,logcat中没有显示错误消息。我哪里出错?

0 个答案:

没有答案
相关问题