Номер не может проверить целостность данных в Android

Класс 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 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.
        }
    }

}

Класс 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);
}

Здесь я получил сообщение об ошибке после первого запуска приложения. Похоже, что приложение пытается создать DATABASE еще раз, но уже существует существующий, поэтому они предложили изменить код версии. Мое требование состоит в том, что мне нужно только вставить новый набор данных. Как я могу это достичь? Заранее спасибо. Вот ошибка 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.

Ответы

Ответ 1

Если вы только разрабатываете приложение на данный момент, это означает, что вы не занимаетесь производством и не удаляете приложение с устройства и его установка снова будет работать по мере необходимости.

Ответ 2

Android 6. 0+

Для тех из вас, кто сталкивается с этим сейчас через несколько дней, просто деинсталляция может не помочь, и это приведет вас в бешенство, поэтому, прежде чем вам придется это понять, позвольте мне рассказать об этой проблеме: Google представил функциональность "autobackup" в Android 6.0, который возвращает БД при переустановке. (https://developer.android.com/guide/topics/data/autobackup.html)

Вы можете просто добавить...

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

... чтобы отключить эту функциональность, и вам хорошо идти (теперь вы можете просто удалить, чтобы удалить базу данных).

Ответ 3

Если вам не нужны миграции при обновлении объектов:

  1. Увеличить версию базы данных
  2. Добавьте метод fallbackToDestructiveMigration() во время создания базы данных, например:

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

Надеюсь, это поможет кому-то;)

Ответ 4

Увеличить версию:

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

Взял по ссылке

Ответ 5

В моем случае переустановка не помогла, а также я не смог установить android:allowBackup:true потому что это требовалось для одной из библиотек, которые я использовал. Поэтому я выбрал "Настройки"> "Приложения"> "Мое приложение" и очистил данные и память для этого приложения. Проблема ушла;)

Ответ 6

Шаг 1: Установите новую сборку

Шаг 2: Очистить все данные приложения из настроек.

Шаг 3: Откройте приложение (теперь будет работать нормально)