本文很好地展示了不同的数据库方法:
我使用方法2:一个Application对象,它包含我制作的单个LocalDatabaseAdapter。这包含DatabaseOpenHelper等。
public class MyApplication extends Application {
private static LocalDbAdapter lDb;
public void onCreate() {
super.onCreate();
MyApplication.context = getApplicationContext();
lbm = LocalBroadcastManager.getInstance(context);
[..]
}
public static LocalDbAdapter getLDb(){
if(lDb==null){
lDb = new LocalDbAdapter(context);
}
if(lDb.isOpen()){
return lDb;
}else{
return lDb.open();
}
}
@Override
public void onTerminate() {
super.onTerminate();
lDb.close();
}
现在当我启动相机应用程序然后返回我的主要活动时,我得到数据库永不关闭错误。正如它所指出的,这个db是在Application上下文中创建的,所以为什么我不在我的Activity中关闭它,我认为这是个主意。只有一个数据库对象的一个重要优点是,任何写入的LocalDbAdapter的所有方法都使用插入或更新周围的protected(this)语句。
在OnActivityResult中,在相机拍照后,我获得了像
这样的数据库LocalDbAdapter ldb = MyApplication.getLDb();
这让我感到非常沮丧。如果我在onPause of MainActivity中关闭它,我担心使用相同对象的后台服务会遇到麻烦,我甚至会将对象保持在onActivityResult的本地...