Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Kotlin 1.2.21+;SimpleXml 2.3.0-消费列表错误(必须标记set get方法)_Java_Android_Xml_Kotlin_Retrofit2 - Fatal编程技术网

Java Kotlin 1.2.21+;SimpleXml 2.3.0-消费列表错误(必须标记set get方法)

Java Kotlin 1.2.21+;SimpleXml 2.3.0-消费列表错误(必须标记set get方法),java,android,xml,kotlin,retrofit2,Java,Android,Xml,Kotlin,Retrofit2,我正试图通过改造2来使用SimpleXML。在与Kotlin进行了数小时的斗争后,我决定尝试Java版本,然后将其转换为Kotlin。Java版本运行良好 错误: java.lang.RuntimeException: org.simpleframework.xml.core.MethodException: Annotation @org.simpleframework.xml.ElementList(data=false, empty=true, entry=, inline=true, n

我正试图通过改造2来使用SimpleXML。在与Kotlin进行了数小时的斗争后,我决定尝试Java版本,然后将其转换为Kotlin。Java版本运行良好

错误:

java.lang.RuntimeException: org.simpleframework.xml.core.MethodException: Annotation @org.simpleframework.xml.ElementList(data=false, empty=true, entry=, inline=true, name=entry, required=true, type=void) must mark a set or get method
我需要一个能够使用XML的Kotlin模型类。 以下是输入:

<feed>
   <entry>
        <id> someid </id>
        <published> somedate </published>
   </entry>

   <entry>
        <id> someid2 </id>
        <published> somedate2 </published>
   </entry>
</feed>

某物
某天
某物2
某某日期2
Java模型类版本(工作正常):

@Root(name=“feed”,strict=false)
公共类MFeed{
@ElementList(name=“entry”,inline=true)
私人名单;
公共MFeed(列表条目列表){
this.entriesList=entriesList;
}
公共MFeed(){
}
公共列表getEntriesList(){
返回条目列表;
}
公共作废设置项列表(列表项列表){
this.entriesList=entriesList;
}
}
@Root(name=“entry”,strict=false)
公开课{
@元素(name=“id”)
私有字符串id;
@元素(name=“published”)
私有字符串已发布;
公共政策(){
}
公共元素(字符串id,字符串已发布){
this.id=id;
this.published=published;
}
公共字符串getId(){
返回id;
}
公共无效集合id(字符串id){
this.id=id;
}
公共字符串getPublished(){
公布报税表;
}
public void setPublished(字符串已发布){
this.published=published;
}
}
自动生成的Kotlin模型如下所示:

@Root(name = "feed", strict = false)
class Feed {
    @ElementList(name = "entry", inline = true)
    private var entriesList: List<MEntry>? = null

    //autogenerated by converter java -> kotlin
    constructor(entriesList: List<MEntry>) {
        this.entriesList = entriesList
    }

    //autogenerated by converter java -> kotlin
    constructor() {}
}

@Root(name = "entry", strict = false)
class Entry {
    @Element(name = "id")
    var id: String? = null

    @Element(name = "published")
    var published: String? = null

    //autogenerated by converter java -> kotlin
    constructor() {}

    //autogenerated by converter java -> kotlin
    constructor(id: String, published: String) {
        this.id = id
        this.published = published
    }
}
@Root(name=“feed”,strict=false)
类提要{
@ElementList(name=“entry”,inline=true)
私有变量entriesList:列表?=null
//由转换器java->kotlin自动生成
构造函数(entriesList:List){
this.entriesList=entriesList
}
//由转换器java->kotlin自动生成
构造函数(){}
}
@Root(name=“entry”,strict=false)
班级报名{
@元素(name=“id”)
变量id:字符串?=null
@元素(name=“published”)
已发布变量:字符串?=null
//由转换器java->kotlin自动生成
构造函数(){}
//由转换器java->kotlin自动生成
构造函数(id:String,published:String){
this.id=id
this.published=published
}
}

我已经为使用XML列表做了很多工作,包括post和。没有一个奏效。也许它们已经过时了。有人面临这样的问题吗

尝试将
@field
添加到注释
@Element*
。您可以将属性移动到构造函数,还可以向类添加
数据
修饰符。像这样:

@Root(name = "feed", strict = false)
data class Feed(
        @field:ElementList(name = "entry", inline = true)
        var entriesList: List<Entry>? = null
)

@Root(name = "entry", strict = true)
data class Entry(
        @field:Element(name = "id")
        var id: String? = null,

        @field:Element(name = "published")
        var published: String? = null
)
@Root(name=“feed”,strict=false)
数据类提要(
@字段:ElementList(name=“entry”,inline=true)
变量entriesList:列表?=null
)
@Root(name=“entry”,strict=true)
数据类条目(
@字段:元素(name=“id”)
变量id:字符串?=null,
@字段:元素(name=“published”)
已发布变量:字符串?=null
)
通过这一点,我成功地反序列化了xml:

import org.simpleframework.xml.Element
import org.simpleframework.xml.ElementList
import org.simpleframework.xml.Root
import org.simpleframework.xml.core.Persister

private val testXml = """
<feed>
   <entry>
        <id> someid </id>
        <published> somedate </published>
   </entry>

   <entry>
        <id> someid2 </id>
        <published> somedate2 </published>
   </entry>
</feed>
""".trimIndent()

@Root(name = "feed", strict = false)
data class Feed(
        @field:ElementList(name = "entry", inline = true)
        var entriesList: List<Entry>? = null
)

@Root(name = "entry", strict = true)
data class Entry(
        @field:Element(name = "id")
        var id: String? = null,

        @field:Element(name = "published")
        var published: String? = null
)

fun main(args: Array<String>) {
    println(testXml)

    val serializer = Persister()

    val example = serializer.read(Feed::class.java, testXml)

    println(example)
}
import org.simpleframework.xml.Element
导入org.simpleframework.xml.ElementList
导入org.simpleframework.xml.Root
导入org.simpleframework.xml.core.Persister
私有val testXml=“”
某物
某天
某物2
某某日期2
“.trimIndent()
@Root(name=“feed”,strict=false)
数据类提要(
@字段:ElementList(name=“entry”,inline=true)
变量entriesList:列表?=null
)
@Root(name=“entry”,strict=true)
数据类条目(
@字段:元素(name=“id”)
变量id:字符串?=null,
@字段:元素(name=“published”)
已发布变量:字符串?=null
)
趣味主线(args:Array){
println(testXml)
val serializer=Persister()
val-example=serializer.read(提要::class.java,testXml)
println(示例)
}

Woa,终于成功了!非常感谢你。在kotlin项目中使用java让我很吃惊:我正试图做同样的事情,但总是在线程“main”java.lang.ClassNotFoundException:com.vipera.data.serversoap.EnvelopeKt和我的数据类y Envelope.kt数据类Envelope(@field:Element(name=“soap env:Body”,required=false)param:Element)中得到相同的错误异常(name=“soap env:Body”,required=false)变量Body:Body?=null)
import org.simpleframework.xml.Element
import org.simpleframework.xml.ElementList
import org.simpleframework.xml.Root
import org.simpleframework.xml.core.Persister

private val testXml = """
<feed>
   <entry>
        <id> someid </id>
        <published> somedate </published>
   </entry>

   <entry>
        <id> someid2 </id>
        <published> somedate2 </published>
   </entry>
</feed>
""".trimIndent()

@Root(name = "feed", strict = false)
data class Feed(
        @field:ElementList(name = "entry", inline = true)
        var entriesList: List<Entry>? = null
)

@Root(name = "entry", strict = true)
data class Entry(
        @field:Element(name = "id")
        var id: String? = null,

        @field:Element(name = "published")
        var published: String? = null
)

fun main(args: Array<String>) {
    println(testXml)

    val serializer = Persister()

    val example = serializer.read(Feed::class.java, testXml)

    println(example)
}