2017-07-05 80 views
0

我想創建一個Realm對象並獲得«java.lang.IllegalArgumentException:'value'屬於不同的領域。»例外。java.lang.IllegalArgumentException:'value'屬於不同的領域

我使用,我已經在片段中OnCreateView發起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則返回錯誤,不節能的事情的條目。

此錯誤消息非常ungoogleable - 因此,我請求你的幫助。

任何輸入將不勝感激!

回答

2

當我在寫的questoin SO我找到了解決方案 - 而不是傳遞RealmObject作爲參數,我只是把ID的對象的存在和交易過程中添加的對象到對象內部的私有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(); 
RealmList<Product> productArray = listEntry.getProductArray(); 
productArray.add(product); 

現在一切正常。零拷貝設計是最好的。

保持在這裏爲那些不幸的人使用谷歌搜索。