尝试在Android Java中引用静态引用非静态方法时遇到了一些问题。基本上来自我的详细类,当我的按钮onClick时,它将在另一个类中执行logintoFacebook():
ivFacebookShare.setOnClickListener(new OnClickListener() {
public void onClick(View v){
AndroidFacebookConnectActivity.loginToFacebook();
}
});
在我的AndroidFacebookConnectActivity类中:
public static void loginToFacebook() {
mPrefs = getPreferences(MODE_PRIVATE);
String access_token = mPrefs.getString("access_token", null);
long expires = mPrefs.getLong("access_expires", 0);
if (access_token != null) {
facebook.setAccessToken(access_token);
}
if (expires != 0) {
facebook.setAccessExpires(expires);
}
if (!facebook.isSessionValid()) {
facebook.authorize(this, new String[] { "email", "publish_stream" }, new DialogListener() {
public void onCancel() {
}
public void onComplete(Bundle values) {
// Function to handle complete event
// Edit Preferences and update facebook acess_token
SharedPreferences.Editor editor = mPrefs.edit();
editor.putString("access_token", facebook.getAccessToken());
editor.putLong("access_expires", facebook.getAccessExpires());
editor.commit();
}
public void onError(DialogError error) {
}
public void onFacebookError(FacebookError fberror) {
}
});
}
}
但是,我在getPreferences
收到错误消息:无法从类型Activity
和facebook.authorize(this,
:不能在静态上下文中使用它
有什么想法吗?提前致谢。
答案 0 :(得分:2)
将Context
对象传递给您的方法loginToFacebook()
并使用它来访问getPreferences()
喜欢
public static void loginToFacebook(Activity activityContext) {
mPrefs = context.getPreferences(MODE_PRIVATE);
// ....... add your code here..
}
您可以将此方法称为
AndroidFacebookConnectActivity.loginToFacebook(getActivity()); // If calling from fragment
如果从活动
调用AndroidFacebookConnectActivity.loginToFacebook(ActivityName.this);
答案 1 :(得分:0)
问题是你正在使用getPreferences()
这是一种非静态方法,而你在静态方法中使用该方法public static void loginToFacebook()
不允许在静态方法中使用任何非静态方法。您需要从loginToFacebook()
方法中删除静态修饰符。
尝试这样:
public void loginToFacebook() {
mPrefs = getPreferences(MODE_PRIVATE);
// Add your code here.
}