从房间中查询数据,但响应的模型字段不足?

问题描述

我有一个响应对象:

class TopicResponse(
    var id: Int = 0,val name: String,var wordNumber: Int,@Ignore
    var imageUrl:String
)

我的查询:

@Dao
interface TopicDao {
    @Query("select Topic.id,Topic.name,count(*) as wordNumber 
    from Topic,WordDetails 
    where Topic.id = WordDetails.topicId group by Topic.id")
    fun getTotalTopic(): List<TopicResponse>
}

响应有3个字段:id,名称,wordNumber。我无法构建有错误的应用程序:

Tried the following constructors but they failed to match:
TopicResponse(int,java.lang.String,int,java.lang.String) -> 
[param:id -> matched field:id,param:name -> matched field:name,param:wordNumber -> matched field:wordNumber,param:imageUrl -> matched field:unmatched]D:\personal\flashcardgame\FlashCard\app\build\tmp\kapt3\stubs\debug\com\ribisoft\english\flashcard\model\TopicResponse.java:9: error: Cannot find setter for field.
private final java.lang.String name = null;

请帮助我,非常感谢!

解决方法

您不能在构造函数参数上使用@Ignore注释。

以下是@Ignore注释的目标:

@Target({ElementType.METHOD,ElementType.FIELD,ElementType.CONSTRUCTOR})

这意味着您可以忽略方法,类的字段或整个构造函数。在您的特定情况下,主构造函数至少需要三个参数namewordNumberimageUrl,因为它们没有默认值。

以下配置应该起作用:

class TopicResponse {
    var id: Int = 0
    val name: String
    var wordNumber: Int
    var imageUrl:String

    @Ignore
    constructor(
        id: Int = 0,name: String,wordNumber: Int,imageUrl:String
    ) {
        this.id = id
        this.name = name
        this.wordNumber = wordNumber
        this.imageUrl = imageUrl
    }
    
    // This constructor will be used by DAO
    constructor(id: Int = 0,wordNumber: Int): this(id,name,wordNumber,"")
}
,

imageUrl来自哪里(如果不是来自API)?我只是假设您从其他地方得到它。在这种情况下,您应该使用如下所示的new FileWriter(file,true)

NetworkTopicResponse

然后您可以将其转换为class NetworkTopicResponse( var id: Int = 0,val name: String,var wordNumber: Int )

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...