Java引用静态引用非静态方法

时间:2014-12-23 04:54:03

标签: java android static

尝试在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

中对非静态方法getPreferences(int)进行静态引用

facebook.authorize(this,:不能在静态上下文中使用它

有什么想法吗?提前致谢。

2 个答案:

答案 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.
}
相关问题