gpt4 book ai didi

java - GreenDao 中带有 POJO 类的自定义类型

转载 作者:行者123 更新时间:2023-12-02 13:07:28 27 4
gpt4 key购买 nike

这是我的示例 JSON:

{  
"open":true,
"total_products":100,
"product":[
{
"p_id":1,
"price":"5.00",
"name":"blah one"
},
{
"p_id":2,
"price":"15.00",
"name":"blah two"
},
...
]
}

这是我的 POJO 类:

@Entity(nameInDb = "products")
public class ProductsPOJO {

@SerializedName("open")
@Property(nameInDb = "open")
private boolean open;

@SerializedName("total_products")
@Property(nameInDb = "total_products")
private Long total_products;

@Convert(converter = ProductConverter.class, columnType = String.class)
@SerializedName("product")
@Property(nameInDb = "product")
private Product product;

public static class productConverter implements PropertyConverter<Product, String> {
//What shoudl I write in convert part?!
@Override
public Product convertToEntityProperty(String databaseValue) {
if (databaseValue == null) {
return null;
}
for (Product p : Product.values()) {
if (p.id == databaseValue) {
return p;
}
}
return Product.DEFAULT;
}

@Override
public String convertToDatabaseValue(Product entityProperty) {
return entityProperty == null ? null : entityProperty.;
}
//
/*@Override
public Product convertToEntityProperty(String databaseValue) {
return Product.valueOf(databaseValue);
}

@Override
public String convertToDatabaseValue(Product entityProperty) {
return entityProperty.name();
}*/
}

public static class Product{
@Id
@SerializedName("p_id")
private Long p_id;

@SerializedName("price")
@Property(nameInDb = "price")
private String price;

@SerializedName("name")
@Property(nameInDb = "name")
private String name;

//Getters & Setters
}

public Product getProduct() {
return product;
}

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

//open & total_products Getters & Setters
}

但我不知道应该为productConverter写什么。
另一方面,Product 类中的字段有多种类型。 字符串整数
我读了这些: https://github.com/greenrobot/greenDAO/blob/V3.1.1/examples/DaoExample/src/main/java/org/greenrobot/greendao/example/Note.java#L26-L27

http://greenrobot.org/greendao/documentation/custom-types/

最佳答案

编辑: :/我在这里还混淆了两件事,greenrobot objectbox 和 greendao...抱歉,但答案保持不变,只需将 objectbox 替换为 greendao :)

<小时/>

在我看来,你将 GSON 和 ObjectBox (GreenDao) 混合在一起

你的 Json 看起来像服务器响应。但在数据库中,您通常只想保存产品实体,而不是答案。因此,最好只有一个 ServerResultPOJO 来用 GSON 解析您的答案(下面的代码未经测试,可能包含小错误,它只是为了让您走上正确的道路)。

public class ServerResultPOJO {
@SerializedName("open")
private boolean open;

@SerializedName("total_products")
private Long total_products;

@SerializedName("product")
private List<Product> products;
}

您的 Prdouct 类可能是一个 ObjectBox (GreenDao) 实体

@Entity
public static class Product{
@Id
private long id;

@Index
@SerializedName("p_id")
private Long p_id;

@SerializedName("price")
@Property(nameInDb = "price")
private String price;

@SerializedName("name")
@Property(nameInDb = "name")
private String name;

//Getters & Setters
}

[ Id 最好不要使用服务器 id 作为数据库实体 id。分别保存 id 和服务器 id。自动增量和其他东西不会混淆]

那么您不需要任何转换器,只需一些方法即可将答案中的所有产品放入数据库 - 在放置新实体之前,您可以搜索 p_id 以检查是否需要在放置之前同步到数据库。

因此,首先解析您的答案,然后执行数据库操作。

如果您确实希望将响应作为数据库实体,则需要一对多关系。但是,您不能对实体和 GSON 解析使用相同的类,或者您使用一些 @transient 字段,这会使事情变得更加复杂。

关于java - GreenDao 中带有 POJO 类的自定义类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44082952/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com