java.lang.IllegalArgumentException:'value'属于不同的领域

时间:2017-07-05 17:24:54

标签: java android realm

我正在尝试创建一个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上保存条目时,它都会返回错误,而不是保存一个东西。

此错误消息非常难以辨认 - 因此我请求您的帮助。

非常感谢任何输入!

1 个答案:

答案 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);

现在一切正常。零拷贝设计是最好的。

将其保留在谷歌搜索不幸的其他人身上。