在导入JSON Android Realm中使用外键

时间:2015-08-04 15:52:28

标签: android json realm

我将数据从json导入Android Realm时遇到问题。我得到“无法映射|预期的JsonObject而不是整数”错误。

我知道当我放入json对象而不是外键但我想使用外键时它有效。 这是我的架构:Database

这是我的模特:

分类

@RealmClass
public class Category extends RealmObject {
    @PrimaryKey
    private int id;
    private String name;

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

产品:

@RealmClass
public class Product extends RealmObject {
    @PrimaryKey
    private int id;
    private String name;
    private Category category;

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Category getCategory() {
        return category;
    }

    public void setCategory(Category category) {
        this.category = category;
    }
}

这是我导入文件的json文件:

categories.json:

[
  {
    "id": 1,
    "name": "Price"
  },
  {
    "id": 2,
    "name": "Site"
  }
]

products.json:

[
  {
    "id": 1,
    "name": "Price Product",
    "category": 1
  },
  {
    "id": 2,
    "name": "Site Product",
    "category": 2
  }
]

Import.java

Realm db = Realm.getInstance(mContext);
db.beginTransaction();
try {
     db.createOrUpdateAllFromJson(Category.class, App.loadJSONFromAsset(mContext, "categories"));
     db.createOrUpdateAllFromJson(Product.class, App.loadJSONFromAsset(mContext, "products"));
     db.commitTransaction();
 } catch (Exception e) {
     db.cancelTransaction();
     e.printStackTrace();
 }
 db.close();

如果我将 products.json 更改为json以下,则可以。

[
  {
    "id": 1,
    "name": "Price Product",
    "category": {
      "id": 1,
      "name": "Price"
    }
  },
  {
    "id": 2,
    "name": "Site Product",
    "category": {
      "id": 1,
      "name": "Site"
    }
  }
]

1 个答案:

答案 0 :(得分:2)

这是给出模型类的预期错误。对其他RealmObject的引用必须表示为JSON中的对象。这是因为如果你想使用Realms内置的JSON功能,你的JSON和模型类之间必须有1:1的映射。

如果要更改该行为,则需要第三方JSON解析器,如GSON或Jackson。您可以在此处阅读更多内容:https://realm.io/docs/java/latest/#gson