Parsing xml kotlin android

前端 未结 2 602
余生分开走
余生分开走 2021-01-19 07:17

I have xml like this:




Сегодня вас могут здорово огорчить. Если от расстройства все начнет валится из рук, просто спо         


        
相关标签:
2条回答
  • 2021-01-19 07:47

    The answer of @daementus is almost perfect. If you want to use constructor injection with default parameters, you have to force Kotlin to generate constructor overloads:

    data class Section @JvmOverloads constructor(
    
        @field:Element(name = "id")
        @param:Element(name = "id")
        val id: Long,
    
        @field:Attribute(name = "title", required = false)
        @param:Attribute(name = "title", required = false)
        val title: String = ""
    )
    

    Without it you will get Constructor not matched for class Section. By default Kotlin generates a constructor with all parameters and a special constructor.

    Note: I would prefer to answer in the comments but I don't have enough points.

    0 讨论(0)
  • 2021-01-19 07:52

    Indeed, Simple XML Framework has a few problems with Kotlin attributes and it can be a little tricky to get things to work.

    To be honest, I am not quite sure what is the problem in your specific case, but I'd guess that the annotation shouldn't be specified for the getter, but rather for the field.

    Anyway, I am combining Simple XML and Kotlin data classes this way, and it seems to be working fine :)

    data class Section (
    
        @field:Element(name = "id", required = false)
        @param:Element(name = "id", required = false)
        val id: Long? = null,
    
        @field:Attribute(name = "title", required = false)
        @param:Attribute(name = "title", required = false)
        val title: String? = null
    )
    

    Edit: If you don't want to use data classes (which I highly recommend, but you might have a reason), this should work without the "data" keyword just fine. If you don't wish to create a constructor, just move the attribute declarations directly into the class and get rid of the @param annotation (the @field must stay).

    0 讨论(0)
提交回复
热议问题