Мне очень трудно понять, что происходит, потому что мое приложение работало абсолютно нормально всего один день go.
Теперь я обновился до Android Studio 3.6 Build #AI-192.7142.36.36.6200805, built on February 12, 2020
. Во-первых, мой эмулятор перестал работать. Я удалил это и создал новый, столкнулся с некоторыми другими проблемами и оставил это на ночь.
Теперь сегодня эмулятор работает, но внезапно я получаю:
java.lang.IllegalStateException: Pre-packaged database has an invalid schema: Challenges(com.dev.solidmind.db.entity.Challenge).
Expected:
TableInfo{name='Challenges', columns={id=Column{name='id', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'}, summary=Column{name='summary', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, name=Column{name='name', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, helpContentHow=Column{name='helpContentHow', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, activePartContent=Column{name='activePartContent', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, isActive=Column{name='isActive', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, content=Column{name='content', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, type=Column{name='type', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, sources=Column{name='sources', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, helpContentWhy=Column{name='helpContentWhy', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[]}
Found:
TableInfo{name='Challenges', columns={id=Column{name='id', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=1, defaultValue='null'}, summary=Column{name='summary', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, name=Column{name='name', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, helpContentHow=Column{name='helpContentHow', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, activePartContent=Column{name='activePartContent', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, isActive=Column{name='isActive', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=0, defaultValue='null'}, content=Column{name='content', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, type=Column{name='type', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, sources=Column{name='sources', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, helpContentWhy=Column{name='helpContentWhy', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[]}
Сообщая мне, что мой идентификатор первичного ключа и логический isActive, как ожидается, будут notNull = true? Но они не указаны как notNull где-либо!
Откуда он получил информацию? Мой класс вызова выглядит следующим образом:
@Entity(tableName = "Challenges")
public class Challenge {
@PrimaryKey(autoGenerate = true)
private int id = 0;
private final String name;
@NonNull
private final ChallengeType type;
private final String summary;
@NonNull
private final String content;
private final String activePartContent;
private final String helpContentWhy;
private final String helpContentHow;
private final String sources;
private boolean isActive;
Только два указанных поля c не равны NULL, и файл DB также ничего не говорит о notNull для этих двух:
Я уже пытался удалить сгенерированные Room Daos и аннулировать кэш Studio (например, здесь ), но он все тот же.
Есть идеи?
Кстати: если я соблюдаю и изменяю два поля на notNull в файле SQLite, он просто переходит на следующую таблицу и помечает случайные поля как 'ожидаемые не notNull'.