Realm, Netzwerkoperationen, Abonnieren und Beobachten von verschiedenen Threads mit RxJava

Ich muss einfach

Lesen Sie einige Daten von einer API in einem Hintergrund-ThreadDie Daten auf der Benutzeroberfläche anzeigen

Save to Realm.

fetchItemsFromServer().subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<ItemList>() {
    @Override
    public void call(ItemList items) {

        displayItems(items);

        try {
            realm.beginTransaction();
            realm.copyToRealmOrUpdate(itemList);
            realm.commitTransaction();
            Logger.v("Realm ", "Copied list object to realm");
        } catch (Exception e) {
            Logger.e("Realm Something went wrong ", e);
            realm.cancelTransaction();
        }

    }
}

Dies löst einen Fehler aus:uf @realm wurde von einem falschen Thread aus zugegriffen

Ich habe 4 Registerkarten, die gleichzeitig verschiedene Nachrichten abrufen.

fetchItemsFromServer () ist ein intensiver Aufruf, und es ist nicht gut, diesen Aufruf auf einen Thread zu beschränken. Ich brauche diese Flexibilität.

Hat jemand eine Problemumgehung gefunden, die Realm auf diese Weise verwendet?

Die meisten Beispiele konzentrieren sich beispielsweise eher auf das Abrufen aus dem Realm als auf das Arbeiten mit Netzwerkoperationen:

Beispiel unten:

Rxjava -https: //realm.io/news/realm-java-0.87.0

Using Realm mit RxJava -https: //realm.io/news/using-realm-with-rxjava (vorherige Lösung, aber Leistungsmängel)

My Realm wird von einem Datenbankmodul durch Abhängigkeitsinjektion bereitgestellt (Dagger 2)

@Module
public class DatabaseModule {

    public static final String REALM_FILE_NAME = "Realm name";

    @Provides
    Realm providesRealmInstance(Context context) {
    return Realm.getInstance(
            new RealmConfiguration.Builder(context)
                    .name(REALM_FILE_NAME)
                    .build());
    }
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage