[JAVA] ActiveAndroid => ReActiveAndroid-Migration

Als ich versuchte, eine App freizugeben und targetSdkVersion auf 26 zu setzen, funktionierte ActiveAndroid nicht. Anscheinend funktioniert es nicht richtig, weil es nicht gewartet wird. https://www.tsurutan.com/entry/2018/10/08/Migration_ActiveAndroid_to_Room https://qiita.com/pside/items/03e6256b404c75f5974b#activeandroid%E3%81%AE%E7%A7%BB%E8%A1%8C%E3%83%91%E3%82%B9%E3%81%A8%E3%81%97%E3%81%A6%E3%81%AEreactiveandroid

Es gibt eine ganze Menge vorhandener Beschreibungen, und es war schwierig, in eine völlig neue Bibliothek zu wechseln, daher ist sie durchaus kompatibel. Migrieren Sie zu ReActive Android (Wenn es neu ist, gibt es mehr Auswahl. Zimmer, etc ...)

Unten finden Sie das entsprechende Memo zu diesem Zeitpunkt Ich weiß nicht, ob es eine Nachfrage gibt, aber ob das Gleiche Menschen hilft, die in Schwierigkeiten sind ...

Korrespondenz

Entspricht dem folgenden Dokument https://imangazalievm.gitbooks.io/reactiveandroid/migration-from-activeandroid.html

Der DB-Name und der Tabellenname werden als "DbName" bzw. "TableName" umgeschrieben.

implementation 'com.reactiveandroid:reactiveandroid:1.4.3'
implementation 'android.arch.persistence:db:1.1.1'

Hinzugefügt.

--Erstellen Sie DbName.java und beschreiben Sie @Database (name =" DbName ", version = 1) und die folgende Migrationsmethode.

DbName.java


static final Migration MIGRATION_1_2 = new Migration(1, 2) {
    @Override
    public void migrate(SupportSQLiteDatabase database) {
        // Since we didn't alter the table, there's nothing else to do here.
    }
};

App.java


        DatabaseConfig appDatabaseConfig = new DatabaseConfig.Builder(DbName.class)
                .addMigrations(DbName.MIGRATION_1_2)
                .build();

        ReActiveAndroid.init(new ReActiveConfig.Builder(this)
                .addDatabaseConfigs(appDatabaseConfig)
                .build());

So ⬇︎

- new Select().from(TableName.class).where("Id = %d".format(id)).executeSingle[TableName]();
+ Select.from(TableName.class).where("Id = %d".format(id)).fetchSingle();
- ActiveAndroid.beginTransaction();
- ActiveAndroid.setTransactionSuccessful();
- ActiveAndroid.endTransaction();

+ ReActiveAndroid.getDatabase(DbName.class).beginTransaction();
+ ReActiveAndroid.getDatabase(DbName.class).getWritableDatabase().setTransactionSuccessful();
+ ReActiveAndroid.getDatabase(DbName.class).endTransaction();

Wenn Sie dies bisher tun, sollte es funktionieren ...

Memo, wo ich erwischt wurde

Wenn Sie das oben beschriebene Verfahren befolgen, sollte es nicht herauskommen.

Please provide a Migration

Please provide a Migration in the builder or call disableMigrationsChecking in the builder in which case ReActiveAndroid will re-create all of the tables.

Verursacht durch das Vergessen, den Migrationsprozess zu schreiben

Fügen Sie die Migrationsmethode wie oben beschrieben hinzu und rufen Sie sie auf, um sie zu entfernen

SupportSQLiteDatabase wurde nicht aufgelöst

https://mvnrepository.com/artifact/android.arch.persistence/db Überprüfen Sie die Version mit

implementation 'android.arch.persistence.db:1.1.1'

Gradle >Error:Failed to resolve: android.arch.persistence.db:1.1.1: Error. >http://fengwanxingzhou.coding.me/Android%E9%94%99%E8%AF%AF/ Es scheint, dass der Paketname falsch angegeben ist. Ich habe es auf "android.arch.persistence: db: 1.1.1" gesetzt und es hat bestanden.

Couldn't read row 0, col -1 from CursorWindow

Caused by: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.

In ActiveAndroid kann es ohne Verwendung von Cursor beschrieben werden, daher sollte es in einigen internen Verarbeitungen verwendet werden.

Selbst wenn ich mir die interne Verarbeitung des Fehlerteils (Select) ansehe, kann ich die Stelle, an der der Cursor verwendet wird, nicht finden ... Wird in fetchSingle verwendet (wo die Definition der Tabelle enthalten ist). Als ich hier einen Haltepunkt gesetzt habe, habe ich versucht, eine Spalte einzufügen, in der "idName" "_id" "war. Die Ursache war, dass ich die Vorlage so brachte, wie sie war, und sie als "@PrimaryKey (name =" _ id ")" festlegte. (Der tatsächliche Spaltenname lautet "Id") Damit

TableName.java


- @PrimaryKey(name = "_id")
+ @PrimaryKey(name = "Id")

Korrigiert und gelöst.

Recommended Posts

ActiveAndroid => ReActiveAndroid-Migration
Schienenmigration