本文很好地展示了不同的数据库方法:
我使用方法 2:一个包含我制作的单个 LocalDatabaseAdapter 的 Application 对象。这包含一个 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();
}
现在,当我启动相机应用程序然后返回我的主要活动时,我得到了数据库从未关闭的错误。正如它所指出的,这个数据库是在应用程序上下文中创建的,所以为什么我没有在我的活动中关闭它是一个问题,我认为这就是想法。只有一个数据库对象的一个重要优点是 LocalDbAdapter 的所有执行任何写入操作的方法都在插入或更新周围使用 protected(this) 语句。
在 OnActivityResult 中,相机拍照后,我获取数据库,如
LocalDbAdapter ldb = MyApplication.getLDb();
这让我非常沮丧。如果我在我的 MainActivity 的 onPause 中关闭它,我担心使用相同对象的后台服务会遇到麻烦,我什至将对象保持在 onActivityResult 的本地......