2016-10-06 10 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のようなライブラリを使用する方がよいでしょう。

関連する問題