Совместное использование глобального объекта facebook в действиях Android

Я создаю глобальный объект Facebook (из android-facebook-sdk), чтобы иметь возможность делиться им со своими действиями:

public class GlobalVars extends Application {

    public static final String APP_ID = "123456789";    
    public Facebook facebook = new Facebook(APP_ID);

}

В одном из действий я добавляю LoginButton, как показано в примерах:

public class FacebookActivity extends Activity {

    private LoginButton mLoginButton;

    private Facebook mFacebook;    
    private AsyncFacebookRunner mAsyncRunner;    

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        mFacebook = ((GlobalVars)getApplicationContext()).facebook;

        setContentView(R.layout.facebook);
        mLoginButton = (LoginButton) findViewById(R.id.login);
        mText = (TextView) FacebookActivity.this.findViewById(R.id.txt);

        mAsyncRunner = new AsyncFacebookRunner(mFacebook);

        SessionStore.restore(mFacebook, this);
        SessionEvents.addAuthListener(new SampleAuthListener());
        SessionEvents.addLogoutListener(new SampleLogoutListener());
        mLoginButton.init(this, mFacebook);

    }

    ...

}

Теперь, когда я вхожу в систему и перехожу к другому действию, используя тот же объект Facebook:

public class MainActivity extends WhipemActivity {


    private Facebook mFacebook;    
    private AsyncFacebookRunner mAsyncRunner;   

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        mFacebook = ((GlobalVars)getApplicationContext()).facebook;

    }

    ....

}

и запустите запрос, например:

mAsyncRunner = new AsyncFacebookRunner(mFacebook);
mAsyncRunner.request("me/friends", new FriendRequestListener());

я получаю

Facebook Error: Error validating access token.

Что случилось? Это правильный способ иметь глобальный объект Facebook?

Спасибо.


person jul    schedule 11.03.2011    source источник


Ответы (1)


jul, в вашей новой активности вам необходимо восстановить токен доступа, полученный при входе в систему.

SessionStore.restore(mFacebook, this);

SessionStore сохраняет и восстанавливает токен доступа в/из SharedPreferences через создаваемый объект SharedPreferences.

SessionStore.restore() получает маркер доступа, сохраненный в SharedPreferences, и устанавливает его для объекта Facebook.

Вы можете заглянуть в проект «Простой пример Facebook» и посмотреть на класс SessionStore, чтобы лучше понять, как работает SessionStore.

facebook-android -sdk/примеры/простой

person Matt    schedule 12.03.2011
comment
это хорошо, но как вы собираетесь экономить.. mFacebook для другой деятельности...? - person kamal_tech_view; 12.07.2012