领域对象未完全保留

乐山

我在尝试了解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)在循环之后添加

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章