Ответ 1
Если вы только разрабатываете приложение на данный момент, это означает, что вы не занимаетесь производством и не удаляете приложение с устройства и его установка снова будет работать по мере необходимости.
Класс 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.
Если вы только разрабатываете приложение на данный момент, это означает, что вы не занимаетесь производством и не удаляете приложение с устройства и его установка снова будет работать по мере необходимости.
Для тех из вас, кто сталкивается с этим сейчас через несколько дней, просто деинсталляция может не помочь, и это приведет вас в бешенство, поэтому, прежде чем вам придется это понять, позвольте мне рассказать об этой проблеме: Google представил функциональность "autobackup" в Android 6.0, который возвращает БД при переустановке. (https://developer.android.com/guide/topics/data/autobackup.html)
Вы можете просто добавить...
<application ...
android:allowBackup="false">
</app>
... чтобы отключить эту функциональность, и вам хорошо идти (теперь вы можете просто удалить, чтобы удалить базу данных).
Если вам не нужны миграции при обновлении объектов:
Добавьте метод fallbackToDestructiveMigration()
во время создания базы данных, например:
Room.databaseBuilder(appContext, AppDatabase.class, "appdb.db").fallbackToDestructiveMigration().build();
Надеюсь, это поможет кому-то;)
Увеличить версию:
@Database(entities = {EmployeeEntry.class}, version = 2, exportSchema = false)
Взял по ссылке
В моем случае переустановка не помогла, а также я не смог установить android:allowBackup:true
потому что это требовалось для одной из библиотек, которые я использовал. Поэтому я выбрал "Настройки"> "Приложения"> "Мое приложение" и очистил данные и память для этого приложения. Проблема ушла;)
Шаг 1: Установите новую сборку
Шаг 2: Очистить все данные приложения из настроек.
Шаг 3: Откройте приложение (теперь будет работать нормально)