所有活动均可访问全球Facebook登录会话

时间:2011-09-24 00:38:06

标签: java android facebook class android-activity

大家好!

我目前正在使用官方Facebook SDK开发适用于手机的Android应用程序。我的应用程序的第一个屏幕是LoginActivity。该活动正在打开Facebook登录对话框,用户可以输入他的Facebook用户名和密码,然后按登录按钮。我想你知道我正在谈论哪个对话,我打赌你已经在某个地方看到了它。

当用户使用该对话框登录Facebook时,Facebook会话设置为true,完全应该如此。 但是,我发现如果您在LoginActivity中,此会话才会生效。如果用户成功登录Facebook,则会通过以下代码将用户移至另一个活动:

private class LoginDialogListener implements DialogListener {

    @Override
    public void onComplete(Bundle values) {
        Intent intent = new Intent().setClass(LoginActivity.this,   LocationActivity.class);
        startActivity(intent);


    }

当用户移动到此案例中的新活动 LocationActivity 时, 会话仍然是真的,但仅适用于LoginActivity。我希望会话是全局的,并且只要用户登录就对整个应用程序和所有活动都是真的。

以下是LoginActivity的一些代码,我希望这会让你的家伙更好地理解它,我敢打赌,如果我发布整个活动,没有人会读它。

public class LoginActivity extends Activity {

public static final String APP_ID = "123123123123123";
public static final String TAG = "FACEBOOK CONNECT";
private Facebook mFacebook;
private AsyncFacebookRunner mAsyncRunner;
private static final String[] PERMS = new String[] { "user_events" };
private Handler mHandler = new Handler();

   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);

    mFacebook = new Facebook(APP_ID);
    mAsyncRunner = new AsyncFacebookRunner(mFacebook);
}

...

public boolean onOptionsItemSelected(MenuItem item) {
    int itemId = item.getItemId();
    switch (itemId) {
    case FacebookCon.LOGIN:
        if (mFacebook.isSessionValid()) {
            AsyncFacebookRunner asyncRunner = new AsyncFacebookRunner(
                    mFacebook);
            asyncRunner.logout(this, new LogoutRequestListener());
        } else {
            mFacebook.authorize(this, PERMS, new LoginDialogListener());
        }
        break;

...

private class LogoutRequestListener implements RequestListener {

    @Override
    public void onComplete(String response, Object state) {

        // Dispatch on its own thread
        mHandler.post(new Runnable() {
            public void run() {
            }
        });
    }

一位朋友告诉我,我应该制作一个“ApplicationController”,我真的不明白那是什么,但是他说类应该扩展整个应用程序,ApplicationController中的所有变量都是整个应用程序的全局变量,并且这就是我想对loginsession做的事情,所以在更改活动时不会丢失。但我不知道如何在我的应用程序中进行此更改,所以我想对此有所帮助。

0 个答案:

没有答案