2017-10-24 8 views
0

私はただのjava/rxjava2 /アンドロイドDEVで開始し、次の作業の例を得ることができた:それはということですかジェネリックrxjava2データベースアクセス層

  1. Observable<Object> source3 = Observable.create(emitter-> { 
           cursor = app.dbh.getAlllTransactions2(); 
           emitter.onNext(cursor); 
           emitter.onComplete(); 
        }).subscribeOn(Schedulers.io()); 
    
        source3.subscribe(c -> { 
         transactionAdapter = new TransactionCursorAdapter(this.getActivity(), (Cursor)c); 
         LSTVW_transactions.setAdapter(transactionAdapter); 
        }); 
    

    は今、私は2つの質問を持っています私は型としてオブジェクトを使用することを余儀なくされています。私が他のものを使用している場合 アンドロイドスタジオはオブジェクトを期待していると言います。それはラムダ式のためですか?私は以前にテストをしていて、どんなタイプでも使用することができました。

  2. 私はより一般的な方法で以下を作りたいと思います。目的はObservableを結果として、任意のdb関数をパラメータとして使用し、その後一般的に呼び出すことです。私はこれを発見した古い例では、ここで見つけることができますが、私は、ラムダ/ rxjava2スタイル(オリジナルリンク:https://dzone.com/articles/easy-sqlite-android-rxjava)に変換することができるか見ない

私がしたいような設定の例変換:私はあなたが第二のスニペットでは達成したいです正確に何を得ることはありません

Observable.create((ObservableOnSubscribe<YourType>) e -> { ... } 

を、私はのために、あなたはこの身体を持つ簡略化することができると思います。

private static <T> Observable<T> makeObservable(final Callable<T> func) { 
    return Observable.create(
     new Observable.OnSubscribe<T>() { 
      @Override 
      public void call(Subscriber<? super T> subscriber) { 
      try { 
       subscriber.onNext(func.call()); 
      } catch(Exception ex) { 
       Log.e(TAG, "Error reading from the database", ex); 
      } 
      } 
    }); 
} 

答えて

1

これを試してみてください0方法(私はただのtry-catch部分を削除):Rxの乱用について

return Observable.create(e -> e.onNext(func.call())); 

:私はストリームのアイテムとしてカーソルを渡すことは良い考えではないと思われます。 Observerが適切に反応できるように、おそらくデータベースから読み込まれた一連のデータがあります。

+0

最初の1つはトリックでした。ありがとう!私はそれを自分で試しましたが、あなたは本当にキャスト(私が逃した)として機能するかっこが必要でした。どのような例も考慮しないで質問の第2部分については、 Observableのようなことをしたいと思います。 obs1 = makeObservable(getAllX()); Observable obs2 = makeObservable(getAllY());カーソルや個々の要素についてコメントしてください。私は同意する、私はちょうどすべてが一緒に収まるかもしれないことを理解しようとしている。ローダー、アダプター、db、rxjava recyclerviews .... etc etc ... – jcuypers

+0

具体的には、私はすでにfunc.call()を試しました。しかし、私がそれを正しくそこに渡す方法は私には分かりません。 – jcuypers

関連する問題