Android Kotlin-使用RxJava的改装请求给出空响应
我想从卫报API上得到消息。我得到了零响应,一切都在下面。我正在使用Kotlin、改装和RxJava。我知道存在一些错误的变量/对象,但我会在解决该问题时更改它们 改装接口Android Kotlin-使用RxJava的改装请求给出空响应,android,kotlin,rx-java,retrofit,rx-android,Android,Kotlin,Rx Java,Retrofit,Rx Android,我想从卫报API上得到消息。我得到了零响应,一切都在下面。我正在使用Kotlin、改装和RxJava。我知道存在一些错误的变量/对象,但我会在解决该问题时更改它们 改装接口 @get:GET("search?api-key=test") val news:Observable<News> { response:{ status:"ok", userTier:"developer", total:2063064,
@get:GET("search?api-key=test")
val news:Observable<News>
{
response:{
status:"ok",
userTier:"developer",
total:2063064,
startIndex:1,
pageSize:10,
currentPage:1,
pages:206307,
orderBy:"newest",
results:[
{
id:"politics/2018/sep/24/keir-starmer-labour-does-not-rule-out-remaining-in-eu",
type:"article",
sectionId:"politics",
sectionName:"Politics",
webPublicationDate:"2018-09-24T18:57:48Z",
webTitle:"Keir Starmer: Labour does not rule out remaining in EU as option",
webUrl:"https://www.theguardian.com/politics/2018/sep/24/keir-starmer-labour-does-not-rule-out-remaining-in-eu",
apiUrl:"https://content.guardianapis.com/politics/2018/sep/24/keir-starmer-labour-does-not-rule-out-remaining-in-eu",
isHosted:false,
pillarId:"pillar/news",
pillarName:"News"
}
]
}
}
和加载数据的函数
private fun loadUrlData() {
compositeDisposable.add(jsonApi.news
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe{news -> displayData(news)})
}
JSON示例
@get:GET("search?api-key=test")
val news:Observable<News>
{
response:{
status:"ok",
userTier:"developer",
total:2063064,
startIndex:1,
pageSize:10,
currentPage:1,
pages:206307,
orderBy:"newest",
results:[
{
id:"politics/2018/sep/24/keir-starmer-labour-does-not-rule-out-remaining-in-eu",
type:"article",
sectionId:"politics",
sectionName:"Politics",
webPublicationDate:"2018-09-24T18:57:48Z",
webTitle:"Keir Starmer: Labour does not rule out remaining in EU as option",
webUrl:"https://www.theguardian.com/politics/2018/sep/24/keir-starmer-labour-does-not-rule-out-remaining-in-eu",
apiUrl:"https://content.guardianapis.com/politics/2018/sep/24/keir-starmer-labour-does-not-rule-out-remaining-in-eu",
isHosted:false,
pillarId:"pillar/news",
pillarName:"News"
}
]
}
}
模型类
data class News( val status: String, val userTier: String, val total: Int, val startIndex: Int, val pageSize: Int, val currentPage: Int, val pages: Int, val orderBy: String, val results: List<Result>)
数据类新闻(val status:String,val userTier:String,val total:Int,val startIndex:Int,val pageSize:Int,val currentPage:Int,val pages:Int,val orderBy:String,val results:List)
我想问题在于最后一个函数或接口,但我找不到解决方案。问题在于数据模型类 您的JSON有一个外部节点(
response
),如果您试图返回一个News
,您将无法得到它,因为reformation
无法将JSON映射到News
类。添加一个名为Response
的外部类,该类包含一个名为Response的字段,该字段的类型为News
,应该可以修复它
像这样:
class Response(val response: News)
注意:我没有在课程前面添加
数据
,因为您不一定需要它。data
关键字只是自动为您添加了一些额外的内容,如toString()
、equals()
和hashCode()
,但是除非您实际将它们用于任何用途,否则我不建议添加data
关键字,因为它当时非常无用。您的数据模型(News
)如何在Kotlin中看起来像?数据类新闻(val status:String,val userTier:String,val total:Int,val startIndex:Int,val pageSize:Int,val currentPage:Int,val pages:Int,val orderBy:String,val results:List)是的,这就是问题所在。:-)您的JSON有一个外部节点(响应
),如果您试图返回一个新闻
,您将无法得到它,因为改型无法将JSON映射到新闻
类。添加一个名为Response
的外部类,该类包含一个名为Response
的字段,该字段的类型为News
,应该可以修复它。非常感谢!我没有看到响应是另一个节点。正如您所说,我创建了类响应,其中有一个带有News对象的构造函数。现在一切都好了。再次感谢:)没问题-我将添加它作为答案,这样您就可以结束问题:)