Я работаю над проектом автономной библиотеки, который требует постоянной простой модели. Вот как выглядит мой SugarRecord
:
/**
* Keeping track of previously received messages by ID
*/
public class MessageRequestIdModel extends SugarRecord {
protected String messageRequestId;
public MessageRequestIdModel() {
}
public MessageRequestIdModel(String messageRequestId) {
this.messageRequestId = messageRequestId;
}
public String getMessageRequestId() {
return this.messageRequestId;
}
public static boolean exists(String id) {
return MessageRequestIdModel.find(
MessageRequestIdModel.class,
"messageRequestId = ?",
id
).size() != 0;
}
}
В классе репозитория я пытаюсь его сохранить, вызвав этот метод:
@Override
public void save(MessageRequestId messageRequestId) {
new MessageRequestIdModel(messageRequestId.getId()).save();
}
Теперь я пытаюсь проверить это, используя android.test.InstrumentationTestCase
, где я передаю Context
в Sugar следующим образом:
SugarContext.init(getInstrumentation().getContext());
Это приводит к ошибке при запуске теста: (усечение, чтобы сохранить этот вопрос в сжатом виде)
android.database.sqlite.SQLiteException: no such table: MESSAGE_REQUEST_ID_MODEL (code 1): , while compiling: INSERT or REPLACE...
Устранение неполадок, которые я уже предпринял:
- Сохранение другого манифеста для тестового пакета для передачи имени пакета
.test
для SugarORM. Без изменений в поведении -
Добавление
MessageRequestIdModel.findById(MessageRequestIdModel.class, (long) 1);
, как в других сообщениях SO. Изменяет ошибку для себя (показывает полную стек-трассировку здесь, если это помогает):android.database.sqlite.SQLiteException: no such table: MESSAGE_REQUEST_ID_MODEL (code 1): , while compiling: SELECT * FROM MESSAGE_REQUEST_ID_MODEL WHERE id=? LIMIT 1 at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889) at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500) at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58) at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37) at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44) at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1316) at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1163) at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1034) at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1240) at com.orm.SugarRecord.find(SugarRecord.java:192) at com.orm.SugarRecord.findById(SugarRecord.java:102) at pm.tin.apprise.entities.message_request_ids.MessageRequestIdModelRepository.save(MessageRequestIdModelRepository.java:19)
-
Я попытался удалить всю конфигурацию Sugar ORM из манифеста, как это было предложено многими - это ничего не меняет
-
Я попытался создать модуль Sample App и попытался запустить его в качестве тестового примера для этого приложения, в случае, если автономные приложения не получили нужные ресурсы на эмуляторе/устройстве (я тестировал на оба)
-
Я попытался увеличить число
VERSION
для базы данных -
Я попытался переключиться на
ActivityTestCase
и использоватьgetActivity().getApplicationContext()
. Это по существу выходит из строя с ошибкой, которая предполагает, что этот Контекст неполный, чтобы иметь возможность настроить SQLite
Как вы можете видеть, я всю ночь надавил на этот валун, но на данный момент это похоже на Sisyphean, и у меня нет абсолютно никакой цели для моей следующей попытки отладки, кроме как использовать другую ORM, чем Sugar (что не делает Кажется, это проблема). Нет ничего более выхолощенного, что вы не сможете запустить SQLite в тестовом примере, и я взываю к вам в помощь Священному программисту: - '(