我正在尝试创建一个Realm对象并获得« java.lang.IllegalArgumentException:'value'属于另一个Realm。»exception。
我正在使用我在OnCreateView的Fragment中启动的Realm.getDefaultInstance()。
我试图保存到数据库中的对象使用其他RealmObject作为参数。
代码如下:
@Override
public boolean onQueryTextSubmit(final String query) {
final ProductList productList =
realm.where(ProductList.class).equalTo("name", listName)
.findFirst();
ListEntry.create(realm, listId, productToAdd);
}
ListEntry.create看起来像这样 -
public static void create(Realm realm,
final long listId,
final Product product,) {
realm.executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
Parent parent = realm.where(Parent.class).findFirst();
RealmList<ListEntry> entries = parent.getListEntries();
ListEntry listEntry = realm.createObject(ListEntry.class, decrement());
listEntry.setListId(listId);
listEntry.setProduct(product);
entries.add(listEntry);)
}
Parent.class是一个抽象,我用它来存储列表中所有已保存条目的列表,因为它是在Realm android的适配器示例(https://github.com/realm/realm-android-adapters/blob/master/example/src/main/java/io/realm/examples/adapters/model/Parent.java)中完成的。
每当我尝试在onQueryTextSubmit上保存条目时,它都会返回错误,而不是保存一个东西。
此错误消息非常难以辨认 - 因此我请求您的帮助。
非常感谢任何输入!
答案 0 :(得分:2)
当我为SO编写questoin时,我找到了解决方案 - 而不是将RealmObject作为参数传递,我只是将对象的id放在那里,并在事务期间将对象添加到Object内的私有RealmList。
所以,而不是 -
ListEntry.class:
@PrimaryKey
private long entryId;
private Product product;
我写了
@PrimaryKey
private long entryId;
private RealmList<Product> productArray;
并在交易中 -
Product product = realm.where(Product.class).equalTo("productId", productId).findFirst();
listEntry.getProductArray().add(product);
现在一切正常。零拷贝设计是最好的。
将其保留在谷歌搜索不幸的其他人身上。