0

我想在 CampaignRepositoryImpl.kt 类的 getCampaigns 函数中使用 rxjava3 调用 api,但我收到以下错误错误A 'return' expression required in a function with a block body ('{...}')

在 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)

在Campaings元数据下方

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)

我想知道我在哪里犯了错误我必须做什么以避免错误

4

2 回答 2

2

从你的 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电话正在接受 aCampaignResponse并将其转换为List<Campaign>.

于 2021-07-02T17:17:20.970 回答
0

由于您的 ApiInterface 返回 Single,因此您可以在方法体中返回它。您可能必须检查 CampaignRepository 有 getCampaigns() 方法,它应该返回 Single。

    class CampaignRepositoryImpl(private val apiInterface: ApiInterface) : CampaignRepository {
    
        override fun getCampaigns(): Single<CampaignsResponse> {
    
           return apiInterface.getCampaigns()
    
        }
    
    }
于 2021-07-02T17:15:45.887 回答