我正在创建一个全局 Facebook 对象(来自 android-facebook-sdk),以便能够在我的活动中共享它:
public class GlobalVars extends Application {
public static final String APP_ID = "123456789";
public Facebook facebook = new Facebook(APP_ID);
}
在其中一项活动中,我添加了登录按钮,如示例所示:
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 对象的正确方法吗?
谢谢。
jul,在您的新活动中,您需要恢复登录时获取的访问令牌。
SessionStore.restore(mFacebook, this);
SessionStore 通过它创建的 SharedPreferences 对象将访问令牌保存到 SharedPreferences 或从 SharedPreferences 恢复访问令牌。
SessionStore.restore() 获取 SharedPreferences 中保存的访问令牌并将其设置在 Facebook 对象上。
您可以查看“Facebook Example Simple”项目并查看 SessionStore 类,以更好地了解 SessionStore 的工作原理。