2017-01-26 2 views
1

Я мигрирующие следующую картину доступа к базе данных SQLite в Android приложения в RxJava мире:закрытия с SqlBright

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

Вы можете использовать подписку, чтобы закрыть соединение.

db.createQuery(tableName, sql, args) 
     .mapToList(mStuffMapper); 
     .doOnSubscribe(new Action0() { 
      @Override public void call() { 
       close(); 
      } 
     }); 

Subscription subscribe = doStuff().subscribe(); 
subscribe.unsubscribe();