我正在尝试从Guardian API获取新闻。我得到空响应,所有内容都在下面。我正在使用Kotlin,Retrofit和RxJava。我知道有些错误的变量/对象,但是当我摆脱这个问题时,我将对其进行更改。
改造界面
@get:GET("search?api-key=test")
val news:Observable<News>
改造客户端
val instance : Retrofit
get() {
if (myInstance == null) {
myInstance = Retrofit.Builder()
.baseUrl("https://content.guardianapis.com/")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build()
}
return myInstance!!
}
以及我要加载数据的位置
private fun loadUrlData() {
compositeDisposable.add(jsonApi.news
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe{news -> displayData(news)})
}
JSON示例
{
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>)
我想问题出在最后一个函数或接口上,但是我找不到解决方法。
答案 0 :(得分:0)
问题出在您的数据模型类之内。
您的JSON有一个外部节点(response
),如果您尝试返回一个News
,则不会得到它,因为Retrofit
无法将JSON映射到News
类。添加一个名为Response
的外部类,该类包含一个名为News
类型的response字段,可以对其进行修复。
像这样:
class Response(val response: News)
注意:由于您不一定需要data
,所以我没有在课程前面添加data
。 toString()
关键字只是自动为您添加了一些额外的内容,例如equals()
,hashCode()
和data
,但是除非您实际上将它们用于其他用途,否则我不推荐添加def find_correct(words_dict):
count=0
for key,value in words_dict.items():
for val, ky in zip(value, key):
if(val!=ky):
count+=1
return count
关键字,因为那样就没用了。