RxAndroid、Dagger 2、Realmを搭載したAndroidに関する質問

Fintasys

私は現在アプリに取り組んでおり、Android用の最新のライブラリであるRxAndroid、Dagger2、Realmを使用したいと考えていました。ネットで良い例が見つからなかったので、ここで聞いてみます。

1.レルムクエリの戻り値の型としてObservableを使用する必要があるのはなぜですか?

public Observable<Bla> getBla() {
    Bla b = realm.where(Bla.class).findFirst();
    return Observable.just(b);
}

ほとんどの場合、レルムクエリはUIThreadで実行されるため、結果をリストではなくリストとして返す必要があるのはなぜですか。

Observable<List<Bla>>

たぶん誰かがこのlibの組み合わせのレルムで非常に良い例を知っていますか?

2.モジュールでプロバイダーについて言及せずにサービスを注入できる理由。私の構造に何か問題がありますか?

@Inject
TableService mTableService;

(以下のコード)

3. ServiceComponentにはAppComponentからのアプリケーションが必要です。@ Componentを正しく構成するにはどうすればよいですか?

@Singleton
@Component(modules = {AppModule.class, ServiceModule.class})
public interface AppComponent {

    void inject(MainActivity activity);
}

@Singleton
@Component(modules = {AppModule.class, ServiceModule.class})
public interface ServiceComponent {

    void inject(MainActivity activity);
}

public class AppModule {

    Application mApplication;

    public AppModule(Application application) {
        mApplication = application;
    }

    @Provides
    @Singleton
    Application providesApplication() {
        return mApplication;
    }

    @Provides
    @Singleton
    RealmConfiguration provideRealmConfiguration(Application application) {
        return new RealmConfiguration.Builder(application)
               .schemaVersion(1)
               .deleteRealmIfMigrationNeeded()
               .build();
    }

    @Provides
    Realm provideRealm(RealmConfiguration realmConfiguration) {
        try {
            return Realm.getInstance(realmConfiguration);
        } catch (Exception cause) {
            Realm.deleteRealm(realmConfiguration);
            return Realm.getInstance(realmConfiguration);
        }
    }
}

@Module
public class ServiceModule {

    public ServiceModule() {
    }

    @Provides
    @Singleton
    GuestService provideGuestService(Realm realm) {
        return new GuestService(realm);
    }
}

public class Application extends android.app.Application {

    private AppComponent mAppComponent;

    @Override
    public void onCreate() {
        super.onCreate();

        mAppComponent = DaggerAppComponent.builder()
                .appModule(new AppModule(this))
                .build();

    }

    public AppComponent getAppComponent() {
        return mAppComponent;
    }
}

ありがとうございました!

EpicPandaForce

1.)RealmResults<T>は自動更新であり、にを追加するRealmChangeListenerRealmResults、基になるデータが変更されるたびに呼び出されます。

private final RealmChangeListener listener = new RealmChangeListener() {
    @Override
    public void onChange(Object results) {
        notifyDataSetChanged();
    }
};

ただし、を呼び出すasObservable()と、変更を通知するを自動的に追加し、登録を解除すると削除RealmResultsするObservable<RealmResults<T>>が作成されRealmChangeListenerます。デフォルトのRealmObservableFactory実装を確認すると、正確な動作を確認できます

したがって、これは実際にはRealmChangeListener結果にを追加するための省略形であり、いつでもビューを更新できます。

Subscription subscription = RxTextView.textChanges(editText).switchMap(charSequence -> 
    realm.where(SomeObject.class)
         .contains("searchField", charSequence.toString(), Case.INSENSITIVE)
         .findAllAsync()
         .asObservable())
.filter(RealmResults::isLoaded) //
.subscribe(objects -> adapter.updateData(objects));

2.)おそらく@Inject注釈付きコンストラクターを指定しました

public class TableService {
    @Inject
    Application application;

    @Inject
    public TableService() {
    }
}

3.)通常、1つのコンポーネント/スコープが必要です。

編集:

  1. レルムクエリの戻り値の型としてObservableを使用する必要があるのはなぜですか?
public Observable<Bla> getBla() {
    Bla b = realm.where(Bla.class).findFirst();
    return Observable.just(b);
}

Realmは変更をリッスンしないため、これをRealmで使用することは実際には意味がありません。

使用する方が合理的です

public Observable<Blah> getBla() {
    Blah blah = realm.where(Blah.class).findFirst();
    if(blah == null) {
        return Observable.empty();
    } else {
        return blah.asObservable();
    }
}

が、個人的に私が使用することを助言するObservable<RealmResults<T>>ことが、より信頼性があるため。

3.)どういう意味かわからない。サービスコンポーネントは@ componentappModule.classなしでは機能しませんが、私の理解ではそうなるはずです。

でもそこにはならないことServiceComponentただ@Component SingletonComponent

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Dagger2を搭載したAndroidプレーンJUnit

分類Dev

Dagger2を搭載したAndroidKotlin、lateinit変数が初期化されていません

分類Dev

Dagger2モジュールでOkHttpClientのHttpLoggingInterceptorのインスタンスを提供することに関する2つの質問

分類Dev

How to fix RxAndroid bug in Android

分類Dev

RxJava 2 / RxAndroid 2 での「マップ」の使用に関する問題

分類Dev

Android:RxandroidとRetrofitを使用したNetworkOnMainThreadException

分類Dev

Android Dagger2

分類Dev

Dagger2を使用してAndroidにLifecycleOwnerを注入する方法は?

分類Dev

Dagger2を使用してURLを動的に変更するためのHostSelectionInterceptorを実装するAndroid

分類Dev

MIPSプロセッサを搭載したAndroidデバイスに関する統計

分類Dev

Android Testing with Robolectric and Dagger

分類Dev

Kotlin and Dagger 2:プロバイダークラスの使用に関する問題

分類Dev

NDKを搭載したAndroidでarc4Randomを使用する

分類Dev

Dagger2とAndroid

分類Dev

BLEAndroidを搭載したデバイスに接続する

分類Dev

RxAndroidでソートする方法

分類Dev

AndroidなしでDagger2を使用する

分類Dev

ubuntu13.10を搭載したMacbookProRetinaがサスペンドから復帰するのに問題

分類Dev

Androidエスプレッソ-dagger2を使用して依存関係を挿入する方法

分類Dev

Retrofit2 + RxJava2 + RxAndroidエラー

分類Dev

Dagger 2.10 Android subcomponents and builders

分類Dev

Dagger2を使用して関数従属性を提供します

分類Dev

AndroidAnnotationsとDagger2

分類Dev

AndroidでRxAndroidのバグを修正する方法

分類Dev

Dagger 2を使用してサービスに投入する

分類Dev

Dagger 2を使用してサービスに投入する

分類Dev

Dagger 2を使用してサービスに投入する

分類Dev

RxAndroidを使用してonKeyDownを処理する

分類Dev

Dagger2: RxJava2 関数を挿入する

Related 関連記事

  1. 1

    Dagger2を搭載したAndroidプレーンJUnit

  2. 2

    Dagger2を搭載したAndroidKotlin、lateinit変数が初期化されていません

  3. 3

    Dagger2モジュールでOkHttpClientのHttpLoggingInterceptorのインスタンスを提供することに関する2つの質問

  4. 4

    How to fix RxAndroid bug in Android

  5. 5

    RxJava 2 / RxAndroid 2 での「マップ」の使用に関する問題

  6. 6

    Android:RxandroidとRetrofitを使用したNetworkOnMainThreadException

  7. 7

    Android Dagger2

  8. 8

    Dagger2を使用してAndroidにLifecycleOwnerを注入する方法は?

  9. 9

    Dagger2を使用してURLを動的に変更するためのHostSelectionInterceptorを実装するAndroid

  10. 10

    MIPSプロセッサを搭載したAndroidデバイスに関する統計

  11. 11

    Android Testing with Robolectric and Dagger

  12. 12

    Kotlin and Dagger 2:プロバイダークラスの使用に関する問題

  13. 13

    NDKを搭載したAndroidでarc4Randomを使用する

  14. 14

    Dagger2とAndroid

  15. 15

    BLEAndroidを搭載したデバイスに接続する

  16. 16

    RxAndroidでソートする方法

  17. 17

    AndroidなしでDagger2を使用する

  18. 18

    ubuntu13.10を搭載したMacbookProRetinaがサスペンドから復帰するのに問題

  19. 19

    Androidエスプレッソ-dagger2を使用して依存関係を挿入する方法

  20. 20

    Retrofit2 + RxJava2 + RxAndroidエラー

  21. 21

    Dagger 2.10 Android subcomponents and builders

  22. 22

    Dagger2を使用して関数従属性を提供します

  23. 23

    AndroidAnnotationsとDagger2

  24. 24

    AndroidでRxAndroidのバグを修正する方法

  25. 25

    Dagger 2を使用してサービスに投入する

  26. 26

    Dagger 2を使用してサービスに投入する

  27. 27

    Dagger 2を使用してサービスに投入する

  28. 28

    RxAndroidを使用してonKeyDownを処理する

  29. 29

    Dagger2: RxJava2 関数を挿入する

ホットタグ

アーカイブ