簡體   English   中英

通用rxjava2數據庫訪問層

[英]Generic rxjava2 database access layer

我剛開始使用java / rxjava2 / android開發並設法獲得以下工作示例:

    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);
    });

現在我有兩個問題:

  1. 我被迫使用Object作為類型怎么辦。 如果我使用其他任何工具,android studio都會說它需要Object。 是因為有lambda表達式。 我之前做過測試,他們允許我使用任何類型。
  2. 我想以更通用的方式進行以下介紹。 目標是使結果具有Observable,並帶有一個任意的db函數作為參數,然后將其通用地調用。 我發現的一個較舊的示例可以在此處找到,但我看不到如何將其轉換為lambda / rxjava2樣式(原始鏈接: https ://dzone.com/articles/easy-sqlite-android-rxjava)

我要轉換的此類設置的示例:

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);
            }
          }
    });
}

嘗試這個:

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

對於第二個片段,我沒有確切地想要實現什么,但我認為您可以使用makeObservable方法簡化擁有該正文的makeObservable (我剛剛刪除了try-catch部分):

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

關於濫用Rx:我認為將Cursor作為流的一個項傳遞不是一個好主意。 您可能會有從數據庫讀取的數據流,以便您的Observer可以正確響應。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM