2011-06-26 46 views
3

今天終於有了我的Facebook實現工作,當我開始在我的應用程序中實現它時,我通過@Override獲得了以下錯誤。Android @Override錯誤

類型的方法的onComplete(束)FBConnectionActivity.LoginDialogListener 必須重寫超類方法

如果我刪除@覆蓋解決的錯誤,但我想知道爲什麼它是在一個應用程序中抱怨而不是另一個。

我有下面的代碼。

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環境。

希望有人能解釋爲什麼這是。

非常感謝!

回答

8

正常情況下,該消息表明您的方法簽名與其覆蓋的方法不同。然而,看着source for DialogListener,你的方法看起來是正確的。

在Java 5中,不能將@Override註釋與實現了接口的方法一起使用,只能使用實際的超類方法覆蓋。這在Java 6中發生了變化,因此您現在可以在兩種情況下使用它。

如果您正在編譯Java 5(或設置編譯器的-source選項以期望Java 5源),可能是問題的原因(如果它應該是抱怨所有4種方法)。在這種情況下,唯一的解決方案是刪除註釋。

+0

嗨丹,它抱怨所有4種方法,我只挑出一個。這確實是編譯選項。這是一個有點舊的項目,我正在工作,並在那裏抱怨@Overrides。我做了一個新項目並使用相同的來源,並沒有抱怨@Overrides。謝謝你的解釋! – patrick