小编典典

解析xml kotlin android

java

我有这样的XML:

<horo>
<aries>
<today>
Сегодня вас могут здорово огорчить. Если от расстройства все начнет валится из рук, просто спокойно сядьте и тихонько подождите хорошей новости.
</today>
</aries>
<taurus>
<today>
Сегодня у вас могут возникнуть проблемы на личном фронте. Спасти вас от перспективы оказаться не у дел может сухой, рациональный и в высшей степени объективный подход к проблеме.
</today>
</taurus>
</horo>

现在,我学习Kotlin进行翻新。我包括用于解析xml的库,但我不明白如何创建用于解析此xml的对象。我有对象:

@Root(name = "horo", strict = false)
open class DailyHoroscope{
    @get : Element(name = "aries") var aries : Aries? = null
}

@Root(name = "aries", strict = false)
open class Aries{
    @get : Element(name = "today") var today : String? = null
}

但我有错误:

rg.simpleframework.xml.core.ConstructorException:默认构造函数无法接受类ac中方法“ aries”上的@
org.simpleframework.xml.Element(data = false,name = aries,required =
true,type = void)只读.kotlintest.model。

更新

我用Java编写了代码:

@Root(name = "horo", strict = false)
public class DailyHoroscopeJ {
    @Element(name = "aries")
    public Aries aries;

    public Aries getAries() {
        return aries;
    }

    public void setAries(Aries aries) {
        this.aries = aries;
    }
}

@Root(name = "aries", strict = false)
 class Aries{
    @Element(name = "today")
    public String today;

    public String getToday() {
        return today;
    }

    public void setToday(String today) {
        this.today = today;
    }
}

它工作正常,然后我转换为Kotlin

@Root(name = "horo", strict = false)
class DailyHoroscope {
    @get:Element(name = "aries")
    var aries:Aries? = null
}
@Root(name = "aries", strict = false) class Aries {
    @get:Element(name = "today")
    var today:String? = null
}

但我有同样的问题(((((


阅读 375

收藏
2020-11-26

共1个答案

小编典典

@daementus的答案几乎是完美的。如果要对默认参数使用构造函数注入,则必须强制Kotlin生成构造函数重载:

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 = ""
)

没有它,您将获得 与Section部分不匹配的Constructor 。默认情况下,Kotlin生成具有所有参数和特殊构造函数的构造函数。

注意:我希望在评论中回答,但我的观点不够。

2020-11-26