2010-07-07 72 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