簡體   English   中英

Kotlin-使用RxJava的改造請求給出空響應

[英]Kotlin - Retrofit request using RxJava gives null response

我正在嘗試從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>)

我想問題出在最后一個函數或接口上,但是我找不到解決方案。

問題出在您的數據模型類之內。

您的JSON有一個外部節點( response ),如果您嘗試返回一個News ,則不會得到它,因為Retrofit無法將JSON映射到News類。 添加一個名為Response的外部類,該類包含一個名為News的字段response,該字段應該對其進行修復。

像這樣:

class Response(val response: News)

注意:由於您不一定需要data ,因此我沒有在課程前面添加data data關鍵字只是自動為您添加了一些額外的東西,例如toString()equals()hashCode() ,但是除非您實際上將它們用於任何用途,否則我不建議您添加data關鍵字,因為那樣就沒有用了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM