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