如何在擴展Application類的靜態方法中調用getApplicationContext
?如何在擴展Application類的類中的靜態方法中調用getApplicationContext?
我想在AppContainer類中創建Database類,但是我不知道從哪裏獲取數據庫構造函數的上下文。
數據庫
public class Database extends SQLiteOpenHelper {
public Database(Context context) {
super(context, "database.db", null, 1);
}
}
AppContainer
public class AppContainer extends Application{
// Problem---------|
private static class DatabaseHolder { // v
public static final Database DATABASE = new Database(getApplicationContext());
}
public static Database getDatabase()
{
return DatabaseHolder.DATABASE;
}
}
==================編輯
我在代碼所做的錯誤。我在getDatabase方法中忘記了寫入字「static」。錯誤已得到改善。我不想在我的代碼中創建AppContainer。我想用這個類作爲具有靜態字段的容器,並在沒有創建AppContainer的實例的情況下獲取它們。
,我發現我的問題的解決方案:
public class AppContainer extends Application {
private static AppContainer instance;
private static Database database;
public AppContainer() {
instance = this;
}
public static AppContainer getInstance() {
if (instance == null)
synchronized (AppContainer.class) {
if (instance == null)
instance = new AppContainer();
}
return instance;
}
public static Database getDatabase() {
if (database == null)
synchronized (AppContainer.class) {
if (database == null)
database = new Database(getInstance().getApplicationContext());
}
return database;
}
}
當我們試圖通過調用提供這種方法來獲取上下文,這可能會失敗.. 的事情是,有沒有擔保的onCreate()Provider類之前調用應用類的onCreate() 。 通過存儲靜態上下文...和內存泄漏的機會...! –