shuouyang 2022-07-08 19:49 采纳率: 25%
浏览 109

retrofit+Gson对kotlin数据类的解析失败(泛型擦出)

项目中使用Retrofit+Gson去请求数据,但是同一个bean类用java可以和kotlin数据类不行

类似如下的数据结构

{
    "code": 1,
    "msg": "请求成功",
    "data": [
        {
            "id": 4,
            "type_name": "xxxx",
        },
        {
            "id": 5,
            "type_name": "xxx",
        },
        {
            "id": 6,
            "type_name": "xxxx",
        }
    ]
}

在项目中一般会这么设计bean类

public class BaseResponse<T> {

    private int code;
    private T data;
    private String msg;
    //省略构造方法getter和setter
}
public class Feedback {
    private int  id;
    private String type_name;
    //省略构造方法getter和setter
}

在使用retrofit进行请求时

        Observable<Response<BaseResponse<List<Feedback>>>> feedbackList = apiService.getFeedbackList();

以上步骤能够正常获取到数据

但是由于我嫌弃java使用Feedback时每次都需要添加getter和setter等方法,想着使用kotlin的数据类来实现,如下
data class Feedback(
    var id: Int = 0,
    var type_name: String = "",
    )
//某博客说全部设置初始值能够有默认构造方法
data class Feedback(
    val id: Int = 0,
    val type_name: String = "",
    )
data class Feedback(val id: Int, val type_name: String)

换成kotlin的数据类后,其他都没动,这三种方式,没有一个可以被正常解析的。

其实之前也遇到过,看到很多开源项目都直接封装一个完整的bean类,未做泛型处理,想知道怎么做才能使kotlin的数据类被正常解析
  • 写回答

2条回答 默认 最新

  • 不会写代码的猴子 Android领域优质创作者 2022-07-09 10:13
    关注
    class Feedback {
        private val id = 0
        private val type_name: String? = null
    }
    
    评论

报告相同问题?

问题事件

  • 创建了问题 7月8日

悬赏问题

  • ¥18 help me! 希望大家来看看 吉~
  • ¥15 C++显示超限兔子集结
  • ¥15 sql server 2012的下载出错
  • ¥15 图像识别用户软件开发
  • ¥20 类原生rom lineageos
  • ¥15 有没有会做中专,云计算,卷子的,有偿一百块
  • ¥15 HC32串口DMA循环发送数据
  • ¥15 Uni-App实现飞书授权登陆
  • ¥50 Qt应用中如何通过代码打开开发者工具devtools
  • ¥20 mpp硬解码h264转为yuv