Mur*_*lva 5 java android kotlin
我面临这个问题,我已经做了一些搜索,但没有找到答案。
我想做什么?
我正在使用 Retrofit 从 API 获取一些数据,我可以获取数据,但我想在类中执行 ForEach 来查找我需要的属性。
data class ChampionList(
@SerializedName("version")
val version : String,
@SerializedName("data")
val data : Data) <------ wanna do the foreach in this property
Run Code Online (Sandbox Code Playgroud)
我想这样做,或者类似的事情:(这里我得到以下错误= for循环范围必须有一个'iterator()'方法)
for(dataChampion in ChampionList.Data){
//do something
}
Run Code Online (Sandbox Code Playgroud)
当我搜索时,我发现了一些关于Kotlin反射的内容,但我不明白:(
我发现但不起作用的另一件事是使用这个:
for(data in ChampionList::class.memberProperties){
//access data here, but got an unresolved reference for member properties
}
classes:
data class ChampionList(
@SerializedName("version")
val version : String,
@SerializedName("data")
val data : Data)
data class Data (
@SerializedName("Aatrox") val aatrox : Aatrox,
@SerializedName("Ahri") val ahri : Ahri,
@SerializedName("Akali") val akali : Akali,
@SerializedName("Alistar") val alistar : Alistar,
@SerializedName("Amumu") val amumu : Amumu,
@SerializedName("Anivia") val anivia : Anivia
}
data class Aatrox(
@SerializedName("version") val version: String,
@SerializedName("id") val id: String,
@SerializedName("key") val key: Int,
@SerializedName("name") val name: String,
@SerializedName("title") val title: String,
@SerializedName("blurb") val blurb: String,
@SerializedName("info") val info: Info,
@SerializedName("image") val image: Image,
@SerializedName("tags") val tags: List<String>,
@SerializedName("partype") val partype: String,
@SerializedName("stats") val stats: Stats
)
Run Code Online (Sandbox Code Playgroud)
所有其他职业,如阿狸、阿卡丽、阿利斯塔、阿木木和艾尼维亚,都与亚托克斯相同
for(data in ChampionList::class.memberProperties){
//access data here, but got an unresolved reference for member properties
}
Run Code Online (Sandbox Code Playgroud)
是正确的方法(如果您没有在类内声明任何属性并且不关心顺序),但您需要
如果您还没有,请按此处kotlin-reflect所述添加依赖项(针对 Gradle):
implementation "org.jetbrains.kotlin:kotlin-reflect"
Run Code Online (Sandbox Code Playgroud)添加import kotlin.reflect.full.memberProperties;
如果您确实关心顺序或不希望在类中包含属性,请ChampionList::class.primaryConstructor.valueParameters改为使用。
尝试这样的事情:
for (dataChampion in data.orEmpty()) {
//do something
}
Run Code Online (Sandbox Code Playgroud)
或这个:
data?.let {
for (dataChampion in it) {
}
}
Run Code Online (Sandbox Code Playgroud)
我的猜测是您正在尝试迭代可空类型的数据,希望这对您有用。祝您的英雄联盟应用程序好运:)
| 归档时间: |
|
| 查看次数: |
4985 次 |
| 最近记录: |