我正在将以下访问Android应用程序的SQLite数据库的模式迁移到RxJava世界中:
public List<Stuff> doStuff(){
synchronized (lock) {
open(); // this effectively checks for isOpen() then calls getWritableDatabase()
// query the database for stuff
close(); // SQLiteOpenHelper close method
return stuffList;
}
}
我正在努力的是什么时候应该关闭数据库连接?我知道有些模式没有关闭连接,也没有关闭连接作为Activity方法的一部分。但是,这些模式需要我将逻辑应用于整个数据库管理器类,如果可能的话我想避免使用它。希望有可能有一个建议的方法来处理这个与RxJava,特别是SqlBright包装?我迁移的代码看起来像这样:
public Observable<List<Stuff>> doStuff(){
synchronized (lock) {
open();
String sql = <..>;
return db.createQuery(tableName, sql, args).mapToList(mStuffMapper);
// where do I close()?
}
}
理想情况下,我想要的解决方案应该允许我更改这一方法,其余方法保持当前的打开/关闭模式。
答案 0 :(得分:0)
您可以使用Subscription关闭连接。
db.createQuery(tableName, sql, args)
.mapToList(mStuffMapper);
.doOnSubscribe(new Action0() {
@Override public void call() {
close();
}
});
Subscription subscribe = doStuff().subscribe();
subscribe.unsubscribe();