我将数据从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"
}
}
]
答案 0 :(得分:2)
这是给出模型类的预期错误。对其他RealmObject的引用必须表示为JSON中的对象。这是因为如果你想使用Realms内置的JSON功能,你的JSON和模型类之间必须有1:1的映射。
如果要更改该行为,则需要第三方JSON解析器,如GSON或Jackson。您可以在此处阅读更多内容:https://realm.io/docs/java/latest/#gson