From 6ce7f7736ec0b141ec42d54f8c11264a6092dbb2 Mon Sep 17 00:00:00 2001 From: Pierre Janineh Date: Tue, 28 Dec 2021 12:32:05 +0200 Subject: [PATCH] Using Coroutines --- app/build.gradle | 1 + .../model/network/articles/ArticlesApi.kt | 4 +-- .../network/articles/ArticlesApiController.kt | 27 ++++++++--------- .../network/headlines/TopHeadlinesApi.kt | 4 +-- .../headlines/TopHeadlinesApiController.kt | 9 +++--- .../viewmodel/DashboardViewModel.kt | 30 ++++++++----------- 6 files changed, 35 insertions(+), 40 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index b1c1341..847002d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -73,6 +73,7 @@ dependencies { implementation platform('com.google.firebase:firebase-bom:29.0.2') implementation 'com.google.firebase:firebase-crashlytics' implementation 'com.google.firebase:firebase-analytics' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.3.9' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1' implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1' diff --git a/app/src/main/java/com/example/dispatcher/model/network/articles/ArticlesApi.kt b/app/src/main/java/com/example/dispatcher/model/network/articles/ArticlesApi.kt index b5e4a74..761b7a7 100644 --- a/app/src/main/java/com/example/dispatcher/model/network/articles/ArticlesApi.kt +++ b/app/src/main/java/com/example/dispatcher/model/network/articles/ArticlesApi.kt @@ -2,11 +2,11 @@ package com.example.dispatcher.model.network.articles import com.example.dispatcher.model.ArticlesResponse import com.example.dispatcher.model.network.articles.ArticlesApiConstants.END_POINT -import retrofit2.Call +import retrofit2.Response import retrofit2.http.GET import retrofit2.http.QueryMap interface ArticlesApi { @GET(END_POINT) - fun getArticles(@QueryMap params: Map): Call + fun getArticles(@QueryMap params: Map): Response } \ No newline at end of file diff --git a/app/src/main/java/com/example/dispatcher/model/network/articles/ArticlesApiController.kt b/app/src/main/java/com/example/dispatcher/model/network/articles/ArticlesApiController.kt index 24876b2..7a194c3 100644 --- a/app/src/main/java/com/example/dispatcher/model/network/articles/ArticlesApiController.kt +++ b/app/src/main/java/com/example/dispatcher/model/network/articles/ArticlesApiController.kt @@ -14,7 +14,7 @@ import com.example.dispatcher.model.network.articles.ArticlesApiConstants.API__E import com.example.dispatcher.model.network.articles.ArticlesApiConstants.API__EVERYTHING_TO__KEY import com.example.dispatcher.model.network.articles.ArticlesApiConstants.ENDPOINT_EVERYTHING import com.example.dispatcher.model.network.manager.ApiController -import retrofit2.Callback +import retrofit2.Response import java.util.HashMap class ArticlesApiController: ApiController() { @@ -26,18 +26,17 @@ class ArticlesApiController: ApiController() { return ArticlesApi::class.java } - fun getArticles(callback: Callback, - q: String? = null, - qInTitle: String? = null, - sources: String? = null, - domains: String? = null, - excludeDomains: String? = null, - from: String? = null, - to: String? = null, - language: String? = null, - sortBy: String? = null, - pageSize: Int? = null, - page: Int? = null) { + suspend fun getArticles(q: String? = null, + qInTitle: String? = null, + sources: String? = null, + domains: String? = null, + excludeDomains: String? = null, + from: String? = null, + to: String? = null, + language: String? = null, + sortBy: String? = null, + pageSize: Int? = null, + page: Int? = null): Response { val params: MutableMap = HashMap() when { !q.isNullOrEmpty() -> params[API__EVERYTHING_Q__KEY] = q @@ -53,6 +52,6 @@ class ArticlesApiController: ApiController() { page != null -> params[API__EVERYTHING_PAGE__KEY] = "$page" } - getApi().getArticles(params).enqueue(callback) + return getApi().getArticles(params) } } \ No newline at end of file diff --git a/app/src/main/java/com/example/dispatcher/model/network/headlines/TopHeadlinesApi.kt b/app/src/main/java/com/example/dispatcher/model/network/headlines/TopHeadlinesApi.kt index f3e8465..48819b1 100644 --- a/app/src/main/java/com/example/dispatcher/model/network/headlines/TopHeadlinesApi.kt +++ b/app/src/main/java/com/example/dispatcher/model/network/headlines/TopHeadlinesApi.kt @@ -2,11 +2,11 @@ package com.example.dispatcher.model.network.headlines import com.example.dispatcher.model.ArticlesResponse import com.example.dispatcher.model.network.headlines.TopHeadlinesConstants.END_POINT -import retrofit2.Call +import retrofit2.Response import retrofit2.http.GET import retrofit2.http.QueryMap interface TopHeadlinesApi { @GET(END_POINT) - fun getTopArticles(@QueryMap params: Map): Call + suspend fun getArticles(@QueryMap params: Map): Response } \ No newline at end of file diff --git a/app/src/main/java/com/example/dispatcher/model/network/headlines/TopHeadlinesApiController.kt b/app/src/main/java/com/example/dispatcher/model/network/headlines/TopHeadlinesApiController.kt index d22cd54..da0c860 100644 --- a/app/src/main/java/com/example/dispatcher/model/network/headlines/TopHeadlinesApiController.kt +++ b/app/src/main/java/com/example/dispatcher/model/network/headlines/TopHeadlinesApiController.kt @@ -9,7 +9,7 @@ import com.example.dispatcher.model.network.headlines.TopHeadlinesConstants.API_ import com.example.dispatcher.model.network.headlines.TopHeadlinesConstants.API__HEADLINES_SOURCES__KEY import com.example.dispatcher.model.network.headlines.TopHeadlinesConstants.ENDPOINT_TOP import com.example.dispatcher.model.network.manager.ApiController -import retrofit2.Callback +import retrofit2.Response import java.util.HashMap class TopHeadlinesApiController: ApiController() { @@ -21,13 +21,12 @@ class TopHeadlinesApiController: ApiController() { return TopHeadlinesApi::class.java } - fun getTopArticles(callback: Callback, - country: String? = null, + suspend fun getTopArticles(country: String? = null, category: String? = null, sources: String? = null, q: String? = null, pageSize: Int? = null, - page: Int? = null){ + page: Int? = null): Response { val params: MutableMap = HashMap() when { !country.isNullOrEmpty() -> params[API__HEADLINES_COUNTRY__KEY] = country @@ -38,6 +37,6 @@ class TopHeadlinesApiController: ApiController() { page != null -> params[API__HEADLINES_PAGE__KEY] = "$page" } - getApi().getTopArticles(params).enqueue(callback) + return getApi().getArticles(params) } } \ No newline at end of file diff --git a/app/src/main/java/com/example/dispatcher/viewmodel/DashboardViewModel.kt b/app/src/main/java/com/example/dispatcher/viewmodel/DashboardViewModel.kt index 92c63e1..d957ee4 100644 --- a/app/src/main/java/com/example/dispatcher/viewmodel/DashboardViewModel.kt +++ b/app/src/main/java/com/example/dispatcher/viewmodel/DashboardViewModel.kt @@ -2,12 +2,12 @@ package com.example.dispatcher.viewmodel import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope import com.example.dispatcher.model.Article -import com.example.dispatcher.model.ArticlesResponse import com.example.dispatcher.model.network.headlines.TopHeadlinesApiController -import retrofit2.Call -import retrofit2.Callback -import retrofit2.Response +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import java.lang.Exception import java.util.* import kotlin.collections.ArrayList @@ -19,18 +19,14 @@ class DashboardViewModel : ViewModel() { } private fun getArticles() { - TopHeadlinesApiController() - .getTopArticles(object: Callback { - override fun onResponse( - call: Call, - response: Response) { - if (response.isSuccessful && response.body() != null) - articles.value = response.body()!!.articles - } - - override fun onFailure(call: Call, t: Throwable) { - t.printStackTrace() - } - }, Locale.getDefault().country) + viewModelScope.launch(Dispatchers.IO) { + try { + val response = TopHeadlinesApiController().getTopArticles(Locale.getDefault().country) + if (response.isSuccessful && response.body() != null) + articles.postValue(response.body()!!.articles) + } catch (e: Exception) { + e.printStackTrace() + } + } } } \ No newline at end of file