【问题标题】:Get Response With Gson使用 Gson 获得响应
【发布时间】:2021-05-05 09:47:02
【问题描述】:

我正在尝试通过改造 + rxjava + gson 接收响应

我们的后端是用 laravel 开发的。

问题是 gson 无法将 json 转换为我的 java 类

这是我的课程和回答的示例

回复样本:

{
"data": {
    "id": 3,
    "name": "name",
    "last_name": "last name",
    "phone_number": "091212345678",
    "avatar": null
}

}

还有 java 类:

public class User {
private Long id;
private String name;
private String last_name;
private String phone_number;
private String role;
@SerializedName("avatar")
private String profilePicture;


public Long getId() {
    return id;
}

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

public String getName() {
    return name;
}

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

public String getLastName() {
    return last_name;
}

public void setLastName(String last_name) {
    this.last_name = last_name;
}

public String getPhone_number() {
    return phone_number;
}

public void setPhone_number(String phone_number) {
    this.phone_number = phone_number;
}

public String getRole() {
    return role;
}

public void setRole(String role) {
    this.role = role;
}

public String getProfilePicture() {
    return profilePicture;
}

public void setProfilePicture(String profilePicture) {
    this.profilePicture = profilePicture;
}

我不知道 json 响应中的“数据”是什么。

以及为什么 gson 不能将 json 转换为 java。

请帮帮我

【问题讨论】:

    标签: java android json gson


    【解决方案1】:

    由于这个 json 响应是嵌套的,您应该通过在内部包装用户对象来设计如下所示的类以正确解析此响应。

    public class User {
    
    public Long id;
    public String name;
    public String last_name;
    public String phone_number;
    public String avatar;
    
    }
    -----------------------------------
    public class Data {
    
    public User user;
    
    }
    

    【讨论】:

      【解决方案2】:

      像这样重新设计你的模型类:

      public class User {
      
      @SerializedName("data")
      public Data data;
      
      // Generate getter setter for all the field here
      
      }
      

      现在使用您的 Json 属性创建另一个名为 Data 的类:

      public class Data {
      
      public Long id;
      public String name;
      public String last_name;
      public String phone_number;
      public String avatar;
      
      // Generate getter setter for all the field here
      
      }
      

      现在您可以访问如下字段:

      User user = new User();
      //get name
      user.getData().getName();
      //set name
      user.getData().setName("Demo");
      

      【讨论】:

      • 我看到您最近一直在编辑关于 SO 的问题,感谢您提供的所有帮助 :) 在进行编辑时,还请检查问题是否真的需要android studio标签,很多人无缘无故添加,比如这个问题也有标签,不需要它
      • 这个答案对我有帮助,谢谢!但我不明白为什么 laravel 在响应中放置“数据”和额外的层是不必要的
      【解决方案3】:

      您有一个名为“data”的 JSON 对象,而 User 类不包含用于存储“data”对象内容的数据字段。 Gson 正在 User 类中寻找一个名为“data”的字段,该字段可以保存“data”对象的内容,但没有找到。现在有两种方法可以解决这个问题。

      1. 以这种格式返回您的 JSON 对象:

        {
        “id”:3,
        “名称”:“名称”,
        "last_name": "姓氏",
        “电话号码”:“091212345678”,
        “头像”:空
        }

      2.1 创建一个Data类并在User类中声明:

      public class Data {  
      private Long id;  
      private String name;  
      private String last_name;  
      private String phone_number;  
      private String role;  
      @SerializedName("avatar")  
      private String profilePicture;  
      /*Getters and setters here*/ }
      

      2.1。在 User 类中声明数据字段

      public class User {  private Data data; public Data getData() {  return data; }}
      

      【讨论】:

        猜你喜欢
        • 2016-02-25
        • 2016-04-29
        • 1970-01-01
        • 2011-09-18
        • 2020-04-27
        • 2013-05-18
        • 1970-01-01
        • 2019-01-19
        • 2015-07-18
        相关资源
        最近更新 更多