2010-07-07 71 views
2

我有一個DBHandler類將用於幾個活動來做一些crud操作。創建了一個MyApp類(擴展應用程序)來保存DBHandler的一個實例。Android:擴展android.app.Application

我DBHandler類需要上下文來創建SQLiteOpenHelper來填充數據庫等

這就是問題開始的地方:在我的MyApp的構造,我要實例我DBHandler,所以我寫了這個:

public MyApp() { 
    super(); 
    dbh = DBHandler(<WHAT DO I PASS HERE>); 
} 

我試過getApplicationContext(),getBaseContext(),'this'...在這一點上沒有任何東西似乎是完全實例化的上下文。當SQLiteOpenHelper嘗試ctx.getResources()時,我得到一個NPE。

解決方法:創建DBHandler並將其設置在我的主類的onCreate中。 - > UGLY(稱我爲美學家)

問題:Android創建MyApp時有辦法嗎?

謝謝!

回答

1

在MyApp.onCreate()中創建您的DBHandler是實現您想要的正確方法。

@Override 
public void onCreate() { 
    super.onCreate(); 
    dbh = new DBHandler(this); 
} 
+0

感謝您的確認。 但有一個問題:我如何在那裏引用資源(或上下文)? 當我檢查MyApp.onCreate()中的上下文時,它有一個NULL mBase var。當我到達我的MainActivity時,該對象不再爲空。所以在我看來,Android正在調用onCreate來完成上下文的「完成創建」,因此在onCreate中我沒有「完全成長的上下文」。 有意義嗎?我不確定我的假設是否屬實,但是當我嘗試使用我的DBHandler時,它肯定會失敗,因爲mBase爲空。 雞蛋和雞肉的問題,在這裏? 謝謝! – llappall 2010-07-07 02:46:21

+0

MyApp * IS *在MyApp.onCreate內部,因此無論何時您需要上下文,都可以通過** this **。 – 2010-07-07 03:04:14

+0

另外,請確保MyApp.onCreate()中的第一行是super.onCreate(); – 2010-07-07 03:07:09