Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java将静态引用引用为非静态方法_Java_Android_Static - Fatal编程技术网

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

Java将静态引用引用为非静态方法,java,android,static,Java,Android,Static,在androidjava中,我试图将静态引用引用引用到非静态方法时遇到了一些问题。基本上,当我的按钮单击时,它将在另一个类中执行logintoFacebook() ivFacebookShare.setOnClickListener(new OnClickListener() { public void onClick(View v){ AndroidFacebookConnectActivity.loginToFacebook(); } }); 在我的Andr

在androidjava中,我试图将静态引用引用引用到非静态方法时遇到了一些问题。基本上,当我的按钮单击时,它将在另一个类中执行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
处收到错误消息:无法从类型活动对非静态方法getPreferences(int)进行静态引用

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


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

问题是,当您在静态方法中使用非静态方法时,您使用的是
getPreferences()
,而该方法是静态方法
public static void loginToFacebook()

不允许在静态方法中使用任何非静态方法。您需要从
loginToFacebook()
method中删除静态修饰符

试着这样做:

public void loginToFacebook() {
    mPrefs = getPreferences(MODE_PRIVATE);
    // Add your code here.
}

Context
对象传递给您的方法
loginToFacebook()
,并使用它访问
getPreferences()

在这里你可以像这样调用这个方法

AndroidFacebookConnectActivity.loginToFacebook(getActivity()); // If calling from fragment
如果从活动中调用

AndroidFacebookConnectActivity.loginToFacebook(ActivityName.this);

如果我删除了static,那么当另一个类中的onclick侦听器无法访问它时,您可以在设置
onClickListener()的地方创建该类的实例
您可以使用该方法。对不起,您介意给我举个例子吗?首先,连接方法是一种实用方法,您需要将它们添加到实用程序类而不是活动类中。但我在本教程中遵循了这一点:将上下文传递到静态方法,在将上下文传递到静态方法后,我会收到此错误消息方法:类型Contextstatic方法的方法getPreferences(int)未定义,并且类始终保留在内存中,但您仍在使用静态,奇怪!这不会释放内存,可能会导致性能下降。我收到以下错误消息:类型Context的方法getPreferences(int)未定义:)如果您是Android开发人员,奇怪的是,您试图强制使用非静态方法。Android总是建议您不要创建类的对象,如果您可以对方法进行静态设置的话。:)@PankajKumar你能为你的句子提供一些开发者的链接吗?@SilentKiller:)知识不能用点来表达。所以这并不意味着你的知识比我少。阅读。
AndroidFacebookConnectActivity.loginToFacebook(ActivityName.this);