具有块体 ('{...}'

问题描述

我想在 CampaignRepositoryImpl.kt 类中的 getCampaigns 函数中使用 rxjava3 调用 api,但出现以下错误

error

)

在 CampaignRepositoryImpl.kt 类下面

import de.westwing.campaignbrowser.domain.Campaign
import de.westwing.campaignbrowser.domain.CampaignRepository
import io.reactivex.rxjava3.core.Single

class CampaignRepositoryImpl(private val apiInterface: ApiInterface) : CampaignRepository {

    override fun getCampaigns(): Single<List<Campaign>> {

       apiInterface.getCampaigns()

    }

}

在我的接口类下面,我收到了 API 调用

interface ApiInterface {

    @GET("cms/test/campaigns.json")
    fun getCampaigns(): Single<CampaignsResponse>

}

在 CampaignRepository 下方

接口 CampaignRepository {

fun getCampaigns(): Single<List<Campaign>>

}

在我的 CompaignResponse.kt 下方

data class CampaignsResponse(val Metadata: CampaignsMetadata)

在CampaingsMetadata下方

data class CampaignsMetadata(val data: List<CampaignDto>)

下面

data class Campaign(val name: String,val description: String)

在 CampaignDto 下方

class CampaignDto(val name: String,val description: String,val image: ImageDto)

我想知道我哪里出错了我必须做什么才能避免错误

解决方法

从你的api界面,我们可以看到getCampaigns()的类型是Single<CampaignsResponse>。另一方面,在您的存储库实现中,getCampaigns() 的类型是 Single<List<Campaign>>

由于两者都是 Single<Foo>,您需要从一个到另一个 map

鉴于您的类实现,这应该可行:

override fun getCampaigns(): Single<List<Campaign>> {
   return apiInterface.getCampaigns().map { response ->
       response.metadata.data.map {
           Campaign(it.name,it.description)
       }
   }
}

这个 map 调用正在接收一个 CampaignResponse 并将它变成一个 List<Campaign>

,

由于您的 ApiInterface 返回 Single,因此您可以在方法主体中返回它。 您可能需要检查 CampaignRepository 是否具有 getCampaigns() 方法并且它应该返回 Single。

    class CampaignRepositoryImpl(private val apiInterface: ApiInterface) : CampaignRepository {
    
        override fun getCampaigns(): Single<CampaignsResponse> {
    
           return apiInterface.getCampaigns()
    
        }
    
    }