在响应中获取空值
Getting null value in response
我正在尝试从 https://www.reddit.com/r/popular/.rss 获取响应并映射到 Android 中的 Kotlin POJO class。但是当我记录该类别的标签值时,结果为空。对于标题,我得到的响应值是流行链接。
这是实体 class FeedX:-
@Root(name = "feed", strict = false)
class FeedX {
@set: Element(name = "category")
@get: Element(name = "category")
var category: Category? = null
val entry: List<Entry>? = null
val id: String? = null
val link: List<LinkX>? = null
@set: Element(name = "title")
@get: Element(name = "title")
var title: String? = null
val updated: String? = null
}
类别class:-
@Root(name = "category", strict = false)
class Category {
@set: Element(required = false, name = "_label")
@get: Element(required = false, name = "_label")
var _label: String? = null
val _term: String? = null
}
这里是Api界面:-
interface FeedApi {
@GET("{type}/.rss")
fun getPopularFeeds(
@Path("type") type: String?
): Call<FeedX>?
}
这是 MainActivity:-
class MainActivity : AppCompatActivity() {
private val BASE_URL = "https://www.reddit.com/r/"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(SimpleXmlConverterFactory.create())
.build()
val service = retrofit.create(FeedApi::class.java)
service.getPopularFeeds("popular")?.enqueue(object : Callback<FeedX> {
override fun onFailure(call: Call<FeedX>, t: Throwable) {
Log.d("Response Failed", "${t.localizedMessage}")
}
override fun onResponse(call: Call<FeedX>, response: Response<FeedX>) {
if (response.isSuccessful) {
Log.d("Response Success", "${response.body()!!.title}") // for this I am getting value
Log.d("Response Success", "${response.body()!!.category?._label}") // always getting null value
} else {
Log.d("Response Failed jg", "${response.errorBody()}")
}
}
})
}
}
这是因为 title
包含一个值,而 category
标签没有。请参阅下面的差异。
<title>popular links</title>
<category term="AskReddit" label="r/AskReddit"/>
如您所见,category
标签自动关闭。
我正在尝试从 https://www.reddit.com/r/popular/.rss 获取响应并映射到 Android 中的 Kotlin POJO class。但是当我记录该类别的标签值时,结果为空。对于标题,我得到的响应值是流行链接。
这是实体 class FeedX:-
@Root(name = "feed", strict = false)
class FeedX {
@set: Element(name = "category")
@get: Element(name = "category")
var category: Category? = null
val entry: List<Entry>? = null
val id: String? = null
val link: List<LinkX>? = null
@set: Element(name = "title")
@get: Element(name = "title")
var title: String? = null
val updated: String? = null
}
类别class:-
@Root(name = "category", strict = false)
class Category {
@set: Element(required = false, name = "_label")
@get: Element(required = false, name = "_label")
var _label: String? = null
val _term: String? = null
}
这里是Api界面:-
interface FeedApi {
@GET("{type}/.rss")
fun getPopularFeeds(
@Path("type") type: String?
): Call<FeedX>?
}
这是 MainActivity:-
class MainActivity : AppCompatActivity() {
private val BASE_URL = "https://www.reddit.com/r/"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(SimpleXmlConverterFactory.create())
.build()
val service = retrofit.create(FeedApi::class.java)
service.getPopularFeeds("popular")?.enqueue(object : Callback<FeedX> {
override fun onFailure(call: Call<FeedX>, t: Throwable) {
Log.d("Response Failed", "${t.localizedMessage}")
}
override fun onResponse(call: Call<FeedX>, response: Response<FeedX>) {
if (response.isSuccessful) {
Log.d("Response Success", "${response.body()!!.title}") // for this I am getting value
Log.d("Response Success", "${response.body()!!.category?._label}") // always getting null value
} else {
Log.d("Response Failed jg", "${response.errorBody()}")
}
}
})
}
}
这是因为 title
包含一个值,而 category
标签没有。请参阅下面的差异。
<title>popular links</title>
<category term="AskReddit" label="r/AskReddit"/>
如您所见,category
标签自动关闭。