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