在我的应用中,我将 Arraylist 保存到realmlist,并且该列表已保存到realm数据库,所以现在在运行时,当我尝试通过一些搜索查询获取结果时,我 java.lang.UnsupportedOperationException: This feature is available only when the element type is implementing RealmModel.
我似乎无法理解这里出了什么问题。任何帮助将不胜感激!
这是我的领域课程:
public class Vendordb extends RealmObject {
public RealmList<String> getVendor() {
return vendor;
}
public void setVendor(RealmList<String> vendor) {
this.vendor = vendor;
}
RealmList<String> vendor = new RealmList<>();
}
这是用于创建领域列表的代码:
final List<String> vendors = macvendorDatabaseAccess.getvendors();
final RealmList<String> vend = new RealmList<>();
vend.addAll( vendors );
macvendorDatabaseAccess.close();
realm.executeTransaction( new Realm.Transaction() {
@Override
public void execute(Realm realm) {
Vendordb vendordb = realm.createObject( Vendordb.class );
vendordb.setVendor(vend);
}
} );
//在这段代码中,我遇到了错误:
Vendordb vendordb = realm.where(Vendordb.class).findFirst();
RealmList<String> vendor = vendordb.getVendor();
RealmResults<String> filteredMembers = vendor.where().equalTo("mac", identifier).findAll();
if (!filteredMembers.isEmpty()) {
holder.vendor.setText( filteredMembers.get( 0 ).toString() );
}
答案 0 :(得分:0)
您的问题出在setVendor
上,您在对象外部使用了非托管的RealmList
,并在非Realm对象(在本例中为原始String)上使用了查询。
在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);
}
}
您的“创建”部分将变为:
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);
}
} );
我不太确定您要在最后的“搜索”部分中尝试做什么。您有一个字符串列表,但正在对原始类型执行“ where”操作-这可能是导致生成运行时错误的原因。考虑一下要从字符串列表中拉出的内容,然后添加类似的方法来为您查找(也许只是对contains
的调用)。