Ваша проблема в setVendor
, вы используете неуправляемый RealmList
вне объекта и используете запрос к не-Realm-объекту (в данном случае примитивную строку).
В setVendor
вы не можете переназначить значение списка в это время; список уже существует, поэтому вы должны изменить его содержимое.
RealmList
следует использовать только в пределах объекта, которым он управляется. Вы не должны пытаться использовать их вне объекта.
Хотя замечательно пытаться инкапсулировать RealmList
в объекте и предоставлять средства доступа, на самом деле это не помогает; вы заметите, что примеры Realm всегда используют открытых участников. Вы можете сделать их приватными, если хотите, но ваши методы доступа должны затем скрыть реализацию и зависимость от Realm и предоставить вам необходимые операции, необходимые вашему прикладному уровню.
Итак, удалите методы getVendor
и setVendor
из вашей модели.
Далее, добавьте методы, чтобы сделать вашу грязную работу. Э.Г.
public class Vendordb extends RealmObject {
RealmList<String> vendor = new RealmList<>();
public void addVendors(List<String> vendors)
{
this.vendor.addAll(vendors);
}
}
Ваш раздел 'create' становится:
final List<String> vendors = macvendorDatabaseAccess.getvendors();
macvendorDatabaseAccess.close();
realm.executeTransaction( new Realm.Transaction() {
@Override
public void execute(Realm realm) {
Vendordb vendordb = realm.createObject( Vendordb.class );
vendordb.addVendors(vendors);
}
} );
Я не совсем уверен, что вы пытаетесь сделать в заключительной части 'поиска'. У вас есть список строк, но вы выполняете «где» для примитивного типа - это, вероятно, то, что генерирует вашу ошибку во время выполнения. Подумайте, что вы хотите вытащить из списка строк, а затем добавьте аналогичный метод, чтобы найти его для вас (возможно, просто вызов contains
).