2016-10-06 4 views
2

Мне очень понравилось применять многие лучшие практики для моего приложения. Прямо сейчас, я разрабатываю приложение, которое извлекает элемент из SQLite. Я пытаюсь использовать RxJava, но я не уверен, что я делаю это правильно.Какова наилучшая практика SQLite + RxJava?

Это мой код для создания наблюдаемого: DataManager.java

public Observable<Cursor> fetchData(String a, String b) { 
    String query = "select * from " + TABLE_TEST + 
      " where ... + a && b "; 

    Cursor c = db.rawQuery(query, null); 
    c.moveToFirst(); 

    return Observable.just(c); 
} 

и это функция, которая выше называют кодом: PresenterDb.java

void fetchSchedulesDb(String channelReq, String dateReq){ 
    unSubscribeAll(); 
    subscribe(getCursor(channelReq, dateReq), PresenterDb.this); 
} 

и это функция подписки : BasePresenterDb.java

protected <R> void subscribe(Observable<R> observable, Observer<R> observer){ 
    Subscription subscription = observable 
      .subscribeOn(Schedulers.newThread()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .unsubscribeOn(Schedulers.computation()) 
      .subscribe(observer); 
    configureSubscription().add(subscription); 
} 

Класс PresenterDb.java реализует Observer, поэтому в этом классе есть onCompleted, onError и onNext.

Я сомневаюсь, что это не лучшая практика, потому что я думаю, что getCursor все еще работает в основном потоке, а не в фоновом режиме. Если да, то как я могу получить курсор в фоновом потоке. Спасибо.

+3

Я думаю, что лучшая практика использует Observable для возврата объектов вашего запроса в качестве модели данных вместо курсора! –

ответ

2

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