我使用GSON
从json响应中创建SugarRecord
对象。我使用的API返回一个名为" id"的字段,但是" id"的类型。是一个字符串,而不是一个长(后端使用mongo)。
以下是我使用的代码:
Gson gson = new Gson(); // Or use new GsonBuilder().create();
NutritionPlan target = gson.fromJson(jsonObject.getJSONObject("nutrition_day").toString(), NutritionPlan.class);
以下是我的json回复:
{
"nutrition_day": {
"id": "5342b4163865660012ab0000",
"start_on": "2014-04-08",
"protein_target": 157,
"sodium_limit": 2000
}
有没有一种很好的方法来处理这种情况?我试过了
@Ignore
long id;
和
@SerializedName("id")
String nutrition_plan_id;
在我的模型中,但都没有帮助。任何熟悉Sugar ORM的人,知道如何处理不长的id
字段?
答案 0 :(得分:4)
将字符串中的键“id”替换为“nutrition_day_id”。 您可以使用id json和id sql。
jsonObject.getJSONObject("nutrition_day").toString().replace("\"id\"","\"nutrition_day_id\"")
答案 1 :(得分:1)
帮助我将id
名称更改为mid
,并向所有必须序列化的字段添加注释@Expose
,并向新@SerializedName
添加注释id
} field。
@SerializedName("id")
@Expose
private final String mid;
@Expose
private final String street;
答案 2 :(得分:1)
不需要大的改变。
只需在 Long 类型之前使用 transient 语句。
@SerializedName("id")
@Expose
private transient Long id;
然后,如果您具有 getId 和 setId 方法,则应将其删除。
玩得开心!
答案 3 :(得分:0)
我一直关注同样的问题,我发现的唯一解决方案是从我的API重命名id名称。从示例中尝试从您的API发送nutrition营养计划,而不是您的API,它将完成工作。
答案 4 :(得分:0)
这是我的解决方案,但它不是最好的。
我在Feed中忽略了id
public class Feed extends SugarRecord<Feed> {
@Expose int idMember;
}
它工作正常,但真正的id
不再使用。
答案 5 :(得分:0)
我一直在寻找这个问题的解决方案。最后我找到了解决方案。只需将@Table
注释添加到所需的类,而不是从SugarRecord
扩展,并手动添加id
属性。您可以通过transient
关键字将其从Gson序列化中排除,或者/并使用@SerializedName
注释对其进行重命名。
示例(在SugarOrm v1.4上适用于我):
@Table
public class MySugarOrmClass{
@SerializedName("db_id")
private transient Long id = null;
@SerializedName("id")
private Integer aid;
// Add an empty constructor
public MySugarClass(){}
//Other fields and class attributes
...
}
但这意味着你不能在这个类上使用.save(), .delete()
等方法。相反,你必须使用SugarRecord的静态方法:
SugarRecord.save(), SugarRecord.delete()
,...