Библиотека фонтанов Android - Ошибка вывода типа: невозможно определить параметр типа NetworkValue в процессе создания createNetworkWithCacheSupportListing - PullRequest
0 голосов
/ 04 ноября 2018

Я пытаюсь использовать Fountain (https://github.com/xmartlabs/fountain), чтобы помочь мне справиться с нумерацией страниц и локальным / удаленным источником данных.

Я вызываю внутреннюю функцию библиотеки следующим образом:

FountainRx.createNetworkWithCacheSupportListing(
networkDataSourceAdapter = networkDataSourceAdapter,
cachedDataSourceAdapter = cachedDataSourceAdapter,
firstPage = FountainConstants.DEFAULT_FIRST_PAGE,
ioServiceScheduler = Schedulers.io(),
ioDatabaseScheduler = Schedulers.io(),
pagedListConfig = FountainConstants.DEFAULT_PAGED_LIST_CONFIG)

Но я получаю только эту ошибку компилятора:

Type inference failed: Cannot infer type parameter NetworkValue in fun <NetworkValue, DataSourceValue> createNetworkWithCacheSupportListing(networkDataSourceAdapter: RxNetworkDataSourceAdapter<out ListResponse<out NetworkValue>>, cachedDataSourceAdapter: CachedDataSourceAdapter<NetworkValue, DataSourceValue>, ioServiceScheduler: Scheduler = ..., ioDatabaseScheduler: Scheduler = ..., firstPage: Int = ..., pagedListConfig: PagedList.Config = ...): Listing<DataSourceValue>

None of the following substitutions 
(RxNetworkDataSourceAdapter<out ListResponse<out BeerListResponse<List<Beer>>>>,CachedDataSourceAdapter<BeerListResponse<List<Beer>> Any?>,Scheduler,Scheduler,Int,PagedList.Config)
(RxNetworkDataSourceAdapter<out ListResponse<out List<Beer>>>,CachedDataSourceAdapter<List<Beer>, Any?>,Scheduler,Scheduler,Int,PagedList.Config) 

can be applied to
(RxNetworkDataSourceAdapter<BeerListResponse<List<Beer>>>,CachedDataSourceAdapter<BeerListResponse<List<Beer>>, Beer>,Int,Scheduler,Scheduler,PagedList.Config))

Есть идеи, в чем может быть проблема?

Ниже вы можете найти код, который создает RxNetworkDataSourceAdapter:

private fun createNetworkDataSourceAdapter(): RxNetworkDataSourceAdapter<BeerListResponse<List<Beer>>> {
        val pageFetcher = object : RxPageFetcher<BeerListResponse<List<Beer>>> {
            override fun fetchPage(page: Int, pageSize: Int): Single<BeerListResponse<List<Beer>>> =
                remoteSource.getBeers(page = page, pageSize = pageSize)
        }
        return pageFetcher.toTotalEntityCountNetworkDataSourceAdapter()
    }

Если вам нужна дополнительная информация, просто дайте мне знать! Заранее спасибо:)

1 Ответ

0 голосов
/ 04 ноября 2018

Я решил это! Была, как говорил компилятор, проблема вывода типа.

Со следующим кодом:

override fun getAllBeers(): Listing<Beer> {
        val networkDataSourceAdapter: RxNetworkDataSourceAdapter<out BeerListResponse<out List<Beer>>> = createNetworkDataSourceAdapter()
        val cachedDataSourceAdapter: CachedDataSourceAdapter<List<Beer>,Beer> = getBeerLocalSource()
        return FountainRx.createNetworkWithCacheSupportListing(
            networkDataSourceAdapter = networkDataSourceAdapter,
            cachedDataSourceAdapter = cachedDataSourceAdapter,
            firstPage = FountainConstants.DEFAULT_FIRST_PAGE,
            ioServiceScheduler = Schedulers.io(),
            ioDatabaseScheduler = Schedulers.io(),
            pagedListConfig = FountainConstants.DEFAULT_PAGED_LIST_CONFIG)
    }

Используя ключевое слово out kotlin для явного определения типов, сообщение об ошибке наконец исчезло.

Больше информации на этой странице документации Kotlin: https://kotlinlang.org/docs/reference/generics.html

...