Lorsque j'ai essayé de publier une application et de définir targetSdkVersion sur 26, Active Android ne fonctionnait pas. Apparemment, cela ne fonctionne pas correctement car il n'est pas entretenu. 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
Il existe une bonne quantité de descriptions existantes, et il était difficile de passer à une toute nouvelle bibliothèque, donc elle est tout à fait compatible. Migrer vers ReActive Android (Si c'est neuf, il y a plus de choix. Chambre, etc ...)
Ci-dessous le mémo correspondant à ce moment-là Je ne sais pas s'il y a une demande, mais si la même chose aide les gens en difficulté ...
Correspond selon le document suivant https://imangazalievm.gitbooks.io/reactiveandroid/migration-from-activeandroid.html
Le nom de la base de données et le nom de la table sont réécrits en tant que «DbName» et «TableName», respectivement.
--Dans build.gradle
implementation 'com.reactiveandroid:reactiveandroid:1.4.3'
implementation 'android.arch.persistence:db:1.1.1'
Ajoutée.
--Créez DbName.java
et décrivez` @Database (name =" DbName ", version = 1) ʻet la méthode de migration suivante.
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.
}
};
--Appel depuis la partie d'initialisation d'App.java sous la forme suivante
App.java
DatabaseConfig appDatabaseConfig = new DatabaseConfig.Builder(DbName.class)
.addMigrations(DbName.MIGRATION_1_2)
.build();
ReActiveAndroid.init(new ReActiveConfig.Builder(this)
.addDatabaseConfigs(appDatabaseConfig)
.build());
--Supprimez toutes les instructions d'importation de ʻactiveandroid dans le code source et importez le
reactiveandroid. Puisque la structure des répertoires n'a pas changé, vous devriez pouvoir remplacer ʻactiveandroid
par reactiveandroid
.
--Ajoutez @PrimaryKey (name =" id ")
à la clé primaire.
--Changed Table annotation de chaque classe Model à @Table (name =" tableName ", database = DbName.class)
new Select ()
to Select
--Changé ʻexecuteSingle en
fetchSingle --Changé ʻexecute
pour récupérer
Comme ça ⬇︎
- new Select().from(TableName.class).where("Id = %d".format(id)).executeSingle[TableName]();
+ Select.from(TableName.class).where("Id = %d".format(id)).fetchSingle();
count ()> 0
.
(Cochez-le car cela peut affecter les performances. S'il semble sortir, ajoutez une limite)
--GetId () et les autres getters / setters fournis en standard avec ActiveAndroid n'existent pas dans ReActiveAndroid, alors ajoutez-les vous-même si nécessaire.- ActiveAndroid.beginTransaction();
- ActiveAndroid.setTransactionSuccessful();
- ActiveAndroid.endTransaction();
+ ReActiveAndroid.getDatabase(DbName.class).beginTransaction();
+ ReActiveAndroid.getDatabase(DbName.class).getWritableDatabase().setTransactionSuccessful();
+ ReActiveAndroid.getDatabase(DbName.class).endTransaction();
Si vous faites jusqu'à présent, cela devrait fonctionner ...
Si vous suivez la procédure ci-dessus, il ne devrait pas sortir.
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.
Causé par l'oubli d'écrire le processus de migration
Ajouter et appeler la méthode de migration selon la procédure ci-dessus pour l'éliminer
https://mvnrepository.com/artifact/android.arch.persistence/db Vérifiez la version avec
implementation 'android.arch.persistence.db:1.1.1'
Pour graduer
>Error:Failed to resolve: android.arch.persistence.db:1.1.1:
Erreur.
>http://fengwanxingzhou.coding.me/Android%E9%94%99%E8%AF%AF/
Il semble que le nom du package soit spécifié de manière incorrecte.
ʻAndroid.arch.persistence: db: 1.1.1` et il est passé.
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.
Dans ActiveAndroid, il peut être décrit sans utiliser le curseur, il doit donc être utilisé dans certains traitements internes.
Même si je regarde le traitement interne de la partie erreur (
Select
), je ne trouve pas l'endroit où le curseur est utilisé ... Utilisé à l'intérieur defetchSingle
(où la définition de Table est apportée). Quand j'ai mis un point d'arrêt ici, j'essayais de faire entrer une colonne où ʻidNameétait
" _id ". La cause était que j'ai apporté le modèle tel quel et l'ai défini comme
@PrimaryKey (name =" _ id "). (Le vrai nom de la colonne est ʻId
) Alors
TableName.java
- @PrimaryKey(name = "_id")
+ @PrimaryKey(name = "Id")
Corrigé et résolu.