簡體   English   中英

領域對象未完全保留

[英]Realm object not fully persisted

我在嘗試了解realm.io如何持久/保存對象時遇到了麻煩。

我有3個對象(庫存,庫存物品和產品); 當我創建一個包含InventoryItems的清單時,在我關閉應用程序之前,它可以正常工作。 當我重新打開該應用程序時,所有InventoryItems都失去了對Product的引用,而是開始顯示“ null”。

奇怪的是,所有其他屬性(例如,對InventoryItem的Inventory引用)仍然存在。 產品問題。

這就是我想要做的:

模型 產品

public class Product extends RealmObject {
@PrimaryKey
private String id;
@Required
private String description;

private int qtdUnityType1;
private int qtdUnityType2;
private int qtdUnityType3;

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

public int getQtdUnityType1() {
    return qtdUnityType1;
}

public void setQtdUnityType1(int qtdUnityType1) {
    this.qtdUnityType1 = qtdUnityType1;
}

public int getQtdUnityType2() {
    return qtdUnityType2;
}

public void setQtdUnityType2(int qtdUnityType2) {
    this.qtdUnityType2 = qtdUnityType2;
}

public int getQtdUnityType3() {
    return qtdUnityType3;
}

public void setQtdUnityType3(int qtdUnityType3) {
    this.qtdUnityType3 = qtdUnityType3;
}

}

庫存

public class Inventory extends RealmObject {

@PrimaryKey
private String id;

@Required
private String type;

@Required
private Date createdAt;

@Required
private String status;

public String getStatus() {
    return status;
}

public void setStatus(String status) {
    this.status = status;
}

private RealmList<InventoryItem> listItems;


public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getType() {
    return type;
}

public void setType(String type) {
    this.type = type;
}

public Date getCreatedAt() {
    return createdAt;
}

public void setCreatedAt(Date createdAt) {
    this.createdAt = createdAt;
}

public RealmList<InventoryItem> getListItems() {
    return listItems;
}

public void setListItems(RealmList<InventoryItem> listItems) {
    this.listItems = listItems;
}

} InventoryItem

public class InventoryItem extends RealmObject {

@PrimaryKey
private String idItem;

private Inventory inventory;

 private Product product;

public Product getProduct() {
    return product;
}

public void setProduct(Product product) {
    this.product = product;
}


private Date expirationDate;

private int qtdUnityType1;

private int qtdUnityType2;

private int qtdUnityType3;

private int qtdDiscard;

public String getIdItem() {
    return idItem;
}

public void setIdItem(String idItem) {
    this.idItem = idItem;
}

public Inventory getInventory() {
    return inventory;
}

public void setInventory(Inventory inventory) {
    this.inventory = inventory;
}


public Date getExpirationDate() {
    return expirationDate;
}

public void setExpirationDate(Date expirationDate) {
    this.expirationDate = expirationDate;
}

public int getQtdUnityType1() {
    return qtdUnityType1;
}

public void setQtdUnityType1(int qtdUnityType1) {
    this.qtdUnityType1 = qtdUnityType1;
}

public int getQtdUnityType2() {
    return qtdUnityType2;
}

public void setQtdUnityType2(int qtdUnityType2) {
    this.qtdUnityType2 = qtdUnityType2;
}

public int getQtdUnityType3() {
    return qtdUnityType3;
}

public void setQtdUnityType3(int qtdUnityType3) {
    this.qtdUnityType3 = qtdUnityType3;
}

public int getQtdDiscard() {
    return qtdDiscard;
}

public void setQtdDiscard(int qtdDiscard) {
    this.qtdDiscard = qtdDiscard;
}

}

最后是我試圖堅持的數百萬種方式之一

  realm.beginTransaction();

 Inventory inventory = realm.createObject(Inventory.class);
 inventory.setId(id);
 inventory.setCreatedAt(new DateTime().toDate());
 if (radioGroup.getCheckedRadioButtonId() == R.id.rbInventario) {
     inventory.setType("Inventário");
 } else {
     inventory.setType("Validade");
 }
 inventory.setStatus("Aberto");

 RealmList<InventoryItem> inventoryItems = new RealmList<>();
 RealmResults<Product> productsRealmResults = realm.allObjects(Product.class);


 for (int i = 1; i <= productsRealmResults.size(); i++) {
     InventoryItem item = realm.createObject(InventoryItem.class);
     item.setIdProduct(productsRealmResults.get(i - 1).getId() + " - " + productsRealmResults.get(i - 1).getDescription());
     item.setProduct(productsRealmResults.get(i - 1));
     item.setIdItem(i + "-" + id);
     item.setInventory(inventory);        
     item = realm.copyToRealmOrUpdate(item);
     item = realm.copyToRealmOrUpdate(item);
     inventoryItems.add(item);
 }
 inventory.setListItems(inventoryItems);


 realm.copyToRealmOrUpdate(inventory);
 realm.commitTransaction();

我已經在這里看到了像這樣的一些答案: 堆棧答案和Java示例(人,狗,貓)

API隨附

但我不明白如何正確插入此內容。

問題是您正在設置一個InventoryItem元素的列表,這些元素未添加到Realm數據庫中。

更改InventoryItem item = new InventoryItem(); InventoryItem item = realm.createObject(InventoryItem.class);

另外,stockstockItems本身也不存儲在Realm db中。 在循環之后添加realm.copyToRealmOrUpdate(inventoryItems)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM