web-dev-qa-db-fra.com

Room ne peut pas vérifier l'intégrité des données dans Android

Classe MainActivity

public class MainActivity extends BaseActivity {

    private AppDatabase db;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Database creation
        db = Room.databaseBuilder(getApplicationContext(),
                AppDatabase.class, "Medimap-db").build();
//        Profile profile=new Profile("rajitha","12-2-345","male","no 345","test med","test emergency","testurl");
//        db.profileDao().insert(profile);
//        Toast.makeText(getApplicationContext(),"success",Toast.LENGTH_SHORT).show();
        new DatabaseAsync().execute();


    }

    private class DatabaseAsync extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

            //Perform pre-adding operation here.
        }

        @Override
        protected Void doInBackground(Void... voids) {
            //Let's add some dummy data to the database.
            Profile profile = new Profile("rajitha", "12-2-345", "male", "no 345", "test med", "test emergency", "testurl");
            db.profileDao().insert(profile);


            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            Toast.makeText(getApplicationContext(), "success", Toast.LENGTH_SHORT).show();
            //To after addition operation here.
        }
    }

}

Classe AppDatabase

   @Database(entities = {Profile.class, Medicine.class}, version = 1)
    public abstract class AppDatabase extends RoomDatabase {
        public abstract ProfileDao profileDao();
        public abstract MedicineDao medicineDaoDao();
    }

ProfileDao

@Dao
public interface ProfileDao {

    @Query("SELECT * FROM profile")
    List<Profile> getAll();

//    @Query("SELECT * FROM user WHERE uid IN (:userIds)")
//    List<Profile> loadAllByIds(int[] userIds);

//    @Query("SELECT * FROM user WHERE first_name LIKE :first AND "
//            + "last_name LIKE :last LIMIT 1")
//    User findByName(String first, String last);

    @Insert
    void insertAll(Profile... profiles);

    @Insert
    void insert(Profile profile);

    @Delete
    void delete(Profile profile);
}

Ici, j'ai eu une erreur après la première exécution de l'application. Il semble que l’application essaie à nouveau de créer DATABASE, mais il en existe déjà un, ils ont donc suggéré de changer le code de version. Mon exigence est que je n'ai besoin que d'insérer un nouvel ensemble de données. Comment puis-je y arriver? Merci d'avance. Voici l'erreur logcat:

Caused by: Java.lang.IllegalStateException: Room cannot verify the data integrity. Looks like you've changed schema but forgot to update the version number. You can simply fix this by increasing the version number.
9
Rajitha Perera

Si vous ne développez que l'application pour le moment, cela signifie que vous n'êtes pas en production et que vous ne la désinstallez pas du périphérique et que vous l'installez à nouveau, cela fonctionnera selon les besoins.

16
VinayagaSundar

Android 6.0+

Pour ceux d'entre vous qui rencontrent ce problème plusieurs jours à l'avance, la désinstallation risque de ne pas aider et cela vous rendra dingue. Avant que vous ayez à le résoudre, laissez-moi vous raconter le problème: Google a introduit la fonctionnalité de "sauvegarde automatique" dans Android 6.0, qui ramène une base de données lors de la réinstallation. ( https://developer.Android.com/guide/topics/data/autobackup.html )

Vous pouvez simplement ajouter ...

<application ...
    Android:allowBackup="false">
</app>

... pour désactiver cette fonctionnalité et vous êtes prêt à partir (maintenant vous pouvez simplement désinstaller pour supprimer la base de données).

22
g-mac

Augmenter la version:

@Database(entities = {EmployeeEntry.class}, version = 2, exportSchema = false)

Tiré de link

2
Hamid

Si vous ne vous souciez pas des migrations lorsque vous mettez à jour des entités:

  1. Augmenter la version de la base de données
  2. Ajoutez la méthode fallbackToDestructiveMigration() au moment de la création de la base de données, par exemple:

    Room.databaseBuilder (appContext, AppDatabase.class, "appdb.db") . fallbackToDestructiveMigration () . build ();

J'espère que cela aidera quelqu'un;)

2
Hemant Kaushik

Dans mon cas, la réinstallation n'a pas aidé et je ne pouvais pas non plus définir Android:allowBackup:true car l'une des bibliothèques que j'avais utilisée l'exigeait. Alors je suis allé dans Paramètres> Applications> Mon application, et effacé les données et la mémoire pour cette application. Problème parti;)

0
Baftek