{
"first_name": "yy",
"last_name": "uu",
"mobile": "123456",
"email": "qwerty32@g.com",
"user_type":"user",
"bio": "hell",
"expertise_json": {"0":"1", "1":"2"}
}
这是我要发送的Josn, 我对这个用户的java classe:
public class User {
@SerializedName("email")
private String userEmail;
@SerializedName("password")
private String userPassword;
@SerializedName("first_name")
private String userFirstName;
@SerializedName("last_name")
private String userLastName;
@SerializedName("mobile")
private String userMobile;
@SerializedName("user_type")
private String userType;
@SerializedName("expertise_json")
@Expose
private HashMap<String,String> userExpertise;
@SerializedName("bio")
private String bio;
}
public interface ApiInterface {
@POST("register")
Call<User> createUser(@Body User user);
@GET("init")
Call<Expertises> getExpertise();
}
除了Experts_json之外,所有内容都保存到服务器。专业知识_json也是动态的,不限于2或3个值,但可以是任何10 20等。 任何帮助将受到高度赞赏。谢谢
答案 0 :(得分:1)
用以下内容替换您的用户类:
public class User {
@SerializedName("email")
private String userEmail;
@SerializedName("password")
private String userPassword;
@SerializedName("first_name")
private String userFirstName;
@SerializedName("last_name")
private String userLastName;
@SerializedName("mobile")
private String userMobile;
@SerializedName("user_type")
private String userType;
@SerializedName("expertise")
@Expose
private HashMap<String,String> userExpertise;
@SerializedName("bio")
private String bio;
}
答案 1 :(得分:0)
尝试这种方式:
@SerializedName("expertise")
@Expose
private Expertise expertise;
<强> Expertise.java 强>
public class Expertise {
@SerializedName("0")
@Expose
private String _0;
@SerializedName("1")
@Expose
private String _1;
public String get0() {
return _0;
}
public void set0(String _0) {
this._0 = _0;
}
public String get1() {
return _1;
}
public void set1(String _1) {
this._1 = _1;
}
答案 2 :(得分:0)
我在你的代码中看到“ @SerializedName ”,所以应该使用gson。
这是一个链接,说明@SerializedName注释的基本目的是什么。
what is the basic purpose of @SerializedName annotation in android using Gson
因此,当您使用@SerializedName时,这意味着您使用json中特定标记的值指定字段的值。对于您的情况,这意味着字段 userExpertise 使用json中的 expertise_json 的值,这根本不存在。解决方案可以将专业知识_json 更改为专业知识
public class User {
@SerializedName("email") private String userEmail;
@SerializedName("password") private String userPassword;
@SerializedName("first_name") private String userFirstName;
@SerializedName("last_name") private String userLastName;
@SerializedName("mobile") private String userMobile;
@SerializedName("user_type") private String userType;
@SerializedName("expertise")
@Expose
private HashMap<String,String> userExpertise;
@SerializedName("bio") private String bio;
}
添加强>
这里:在你的代码中。
public interface ApiInterface {
@POST("register")
Call<User> createUser(@Body User user); // watch this param, 'User user'
...
现在,让我们回到json文件
{
"status": true,
"body": {
"first_name": "yy",
...
"expertise_json": {"0":"1", "1":"2"}
}
}
问题在于:
您发送的内容为用户,而用户,则其字段为 userEmail , userType < / strong>等,但没有状态字段,没有 body 字段。
所以你想要gson工作,你应该提供一个包含这些字段的类。
public class User {
@SerializedName("status") private boolean status;
@SerializedName("body") private Body body;
public static class Body {
@SerializedName("email") private String userEmail;
@SerializedName("password") private String userPassword;
@SerializedName("first_name") private String userFirstName;
@SerializedName("last_name") private String userLastName;
@SerializedName("mobile") private String userMobile;
@SerializedName("user_type") private String userType;
@SerializedName("expertise")
@Expose
private HashMap<String,String> userExpertise;
@SerializedName("bio") private String bio;
}
}
现在应该可以了。