Как сгруппировать данные, возвращенные из Network API в RXJAVA - PullRequest
0 голосов
/ 16 апреля 2019

Я получаю ответ от data api, и мне нужно показать эти данные в представлении переработчика, группируя данные на основе источника.

По сути, я получаю Список ArticalDto, и я хочу преобразовать этот список в Список, так как мне нужно сгруппировать данные по источникам и показать в виде переработчика в многократном представлении. Я думал использовать GroupBy или Map для этого, но не получил точного подхода. Вот код, который я написал для получения данных из сети.

class ContentListViewModel : BaseViewModel() {
    internal val result = MutableLiveData<Result<ArticlesDto>>()

    /**
     * Fetches news from sources.
     * You do not need to understand this implementation in order to complete the assignment.
     * All the updates (response) are posted to the [result] liveData.
     */
    fun fetchNews(params: ContentParams = ContentParams()) {
        NewsApiRepository(apiKey = apiKey).getEverything(
            q = params.q,
            sources = params.sources,
            domains = params.domains,
            language = params.language,
            sortBy = params.sortBy,
            pageSize = params.pageSize,
            page = params.page
        )
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .toFlowable()
            .subscribe(
                { result.value = Result.success(it) },
                {
                    Log.e("Error", it.cause?.message ?: "")
                    result.value = Result.failure(it)
                }
            ).disposeOnClear()
    }
}

Кто-нибудь может подсказать мне, как я могу добиться этого с помощью rxjava? Я могу сделать это путем преобразования списка в Hashmap, а затем снова преобразовать его в список, но для этого хочу использовать rxjava.

1 Ответ

0 голосов
/ 16 апреля 2019

создайте свой новый класс pojo для ответа на API. Затем используйте код ниже.

    var categoryResult: MutableLiveData<List<CategoryModel>> = MutableLiveData()

вызов API, ..

fun getCategoryData(storeId: String) {

    if (ConnectivityUtils.isNetworkAvailable(getApplication())) {
        showProgressDialog.postValue(true)
        storeData = storeId
        launch {
            appApiInterface
                    .getCategories(storeId)
                    .with(schedulerProvider)
                    .subscribe(
                            { result ->
                                showProgressDialog.postValue(false)
                                if (result.categories != null)
                                    categoryResult.postValue(result.categories)
                                else
                                    showNoData()
                            },
                            { e ->
                                showProgressDialog.postValue(false)
                                interFragmentInterface?.showDialog(e.getErrorMessage(getApplication()))
                            }
                    )
        }
    } else {
        interFragmentInterface!!.showDialog(getApplication<Application>().getString(R.string.error_message_network))
    }
}

после этого в активности или фрагменте наблюдатель использовал ..

viewModel.categoryResult.observe(this, Observer { it ->
// here set api list of data into adapter class insert method.
// here set your adapter code.
    })

Использовать ViewModel проще.

...