2013-01-02 55 views
0

我有一個工作瑣事遊戲,我現在試圖實現高分。我創建了一個擴展SQLiteOpenHelper的子類DatabaseHelper類。我想從另一個類的子類DatabaseHelper中調用一個方法,並且出現錯誤。這些類不會編譯,因此沒有LogCat輸出。我在代碼中評論了錯誤。從其他類調用子類方法 - Android(java)

代碼結構建議也很讚賞!

Highscores.java

public class Highscores extends Activity { 

    DatabaseHelper dh; 
    SQLiteDatabase db; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     dh = new DatabaseHelper(context); 
    } 

    public class DatabaseHelper extends SQLiteOpenHelper { 

     public DatabaseHelper(Context context) { 
      //code 
     } 

     public boolean check(long score, int percentage) { 
      //code 
     } 
    } 
} 

Results.java

public class Results extends Activity { 

    DatabaseHelper dh; //Error: "DatabaseHelper cannot be resolved to a type." 

    public void onCreate(Bundle savedInstanceState) { 

     dh = new DatabaseHelper(); //Error: "DatabaseHelper cannot be resolved to a type." 
    } 

    public void showResults() { 

     if(dh.check(score, percentage) == true) { //Error: "DatabaseHelper cannot be resolved to a type." 
     dh.insert(score, percentage); //Error: "DatabaseHelper cannot be resolved to a type." 
     } 
    } 
} 

回答

1

聽起來像是你缺少在您Results.java

它應該看起來像進口玉米頂部的進口.somepackage.DatabaseHelper;

像這樣的錯誤通常是類名中的錯字或缺少導入。

+0

這似乎解決了問題。這是正確的方法嗎?看起來很奇怪,只需從另一個類中導入一個子類。 – Matt

+0

這是完全正常的。一些IDE也會自動爲你導入它們。一般也有鍵盤快捷鍵。例如,在OSx上的Eclipse中,我點擊command + shift + o並修復所有這些錯誤。 –

+0

完美。謝謝邁克。 – Matt

6

當你需要一個班級以外的班級時,我建議將班級創建爲單獨的班級。否則,您需要創建外部類的實例來訪問內部類,這將創建Activity的實例並在Activity實例上調用DatabaseHelper,這在Android中不是一個好方法。

如果你仍想繼續使用現有的做法,你這是怎麼需要訪問它:

OuterClass outerObject = new OuterClass(); 
OuterClass.InnerClass innerObject = outerObject.new InnerClass(); 

請仔細閱讀nested classes tutorial

0

不要使用嵌套類,直到你真的確定你需要他們。 將DatabaseHelper移動到獨立的類文件並在需要時導入它。