Это общий вопрос о том, как библиотека постоянных номеров работает в Android.Я столкнулся с возможной ошибкой / особенностью Room, когда я пытался вставить POJO со слишком большим количеством данных в DAO объекта Room, а затем запросить объект позже, либо по id, либо по определенному полю, даст нулевой результат.
В данном случае абсолютно нет журналов ошибок / ошибок, и мне потребовалось некоторое время, чтобы выяснить, что если я разделю большой объект на два объекта с половиной данных, то я смог запросить оба объектапозже (я заметил, что другой POJO в моем Db с подобъектами 3500 String был запрошен правильно, но у вышеупомянутого объекта большего размера есть 6500 подобъектов String).
Если быть точным, ниже приведена структура проблемного объекта, гдедля простоты я исключил геттеры / сеттеры:
@Entity(tableName = KanjiComponent.TABLE_NAME)
public class KanjiComponent {
public KanjiComponent() {}
@PrimaryKey(autoGenerate = true)
@ColumnInfo(index = true, name = COLUMN_ID)
public long id;
@ColumnInfo(name = COLUMN_COMPONENT_STRUCTURE)
private String structure;
@TypeConverters({MyAppDbTypeConverters.class})
private List<KanjiComponent.AssociatedComponent> associatedComponents;
public static class AssociatedComponent {
private String component;
private String associatedComponents;
}
}
Поле «компонент» в KanjiComponent.AssociatedComponent является односимвольной строкой, но поле «relatedComponents» в KanjiComponent.AssociatedComponent может быть любым из короткихСтрока с очень длинной строкой ";"Символы с разделителями.
Список KanjiComponent.AssociatedComponent имеет размер 6500 в моем проблемном объекте, и объекты с размером списка до 3500 не встретили никаких проблем.Поэтому я создал два объекта с размерами списка KanjiComponent.AssociatedComponent 3000 и 3500, и теперь все работает нормально.
Все мои вставки / запросы выполняются в фоновых потоках, а также запрашивается полная база данных (List<KanjiComponent> list = myDatabase.getInstance().getAllKanjiComponents()
)дает результат с размером 0, хотя в базе данных теперь есть 19 допустимых объектов KanjiComponent (т. е. до 3500 подобъектов каждый).
Запрос других баз данных объектов в том же приложении и в том же фоновом потоке работаетхорошо.Запросы для полной вышеупомянутой базы данных дают размер 0, но можно полностью запросить другую базу данных POJO с 85000 объектами малого размера, что дает размер списка 85000. Таким образом, с самой комнатой нет проблем.
IЯ предполагаю, что для POJO существуют ограничения по размеру объектов как в Android, так и в Room, но я не смог найти информацию об этом.Я также не уверен, как измерить размер моих больших POJO, чтобы найти значение этого проблемного порога размера.
Кто-нибудь сталкивался с этой проблемой?Есть ли лучший способ решить эту проблему, кроме ручного разбиения негабаритных объектов перед вставкой их в Room?Каковы ограничения по размеру объекта и / или количеству подобъектов в Room / Android?
Спасибо