今天我终于让我的facebook实现工作了,当我开始在我的应用程序中实现它时,我在@Override上遇到以下错误。
类型的onComplete(Bundle)方法 FBConnectionActivity.LoginDialogListener 必须覆盖超类方法
如果我删除@Override错误已解决,但我想了解为什么它在一个应用程序中而不是另一个应用程序中抱怨这个。
我有以下代码。
public abstract class FBConnectionActivity extends Activity {
private class LoginDialogListener implements DialogListener {
@Override
public void onComplete(Bundle values) {
Log.d(TAG, "LoginONComplete");
String token = mFacebook.getAccessToken();
long token_expires = mFacebook.getAccessExpires();
Log.d(TAG, "AccessToken: " + token);
Log.d(TAG, "AccessExpires: " + token_expires);
sharedPrefs = PreferenceManager
.getDefaultSharedPreferences(mContext);
sharedPrefs.edit().putLong("access_expires", token_expires)
.commit();
sharedPrefs.edit().putString("access_token", token).commit();
mAsyncRunner.request("me", new IDRequestListener());
}
@Override
public void onFacebookError(FacebookError e) {
Log.d(TAG, "FacebookError: " + e.getMessage());
}
@Override
public void onError(DialogError e) {
Log.d(TAG, "Error: " + e.getMessage());
}
@Override
public void onCancel() {
Log.d(TAG, "OnCancel");
}
}
...
}
这只是发生错误的代码的一部分。但是这在一个应用程序中没有任何错误,并且在另一个应用程序中确实存在错误。
经过一番搜索,我发现他们已经在Java 5和6之间做了一些改变。但我认为我在eclipse中的应用程序使用相同的java环境。
希望有人可以解释为什么会这样。
非常感谢!
答案 0 :(得分:8)
通常,该消息表明您的方法签名与它覆盖的方法不同。但是,查看source for DialogListener,您的方法看起来是正确的。
在Java 5中,您不能将@Override
注释与实现接口的方法一起使用,只能使用超类中方法的实际覆盖。这在Java 6中已经改变,因此您现在可以在两种情况下使用它。
如果您正在使用Java 5进行编译(或者将编译器的-source
选项设置为期望Java 5源代码)可能是问题的原因(如果它应该抱怨所有4种方法)。在这种情况下,唯一的解决方案是删除注释。