Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,9 @@ dependencies {
implementation 'com.google.android.material:material:1.1.0-alpha07'

// Retrofit and OkHttp
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
implementation 'com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2'
implementation 'com.squareup.retrofit2:retrofit:2.6.0'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.6.0'
implementation 'com.squareup.retrofit2:converter-gson:2.6.0'
implementation 'com.squareup.okhttp3:okhttp:3.13.1'
implementation 'com.squareup.okhttp3:logging-interceptor:3.13.1'
implementation 'com.jakewharton.timber:timber:4.7.1'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package com.chintansoni.android.repositorypattern.di

import com.chintansoni.android.repositorypattern.BuildConfig
import com.chintansoni.android.repositorypattern.model.remote.ApiService
import com.jakewharton.retrofit2.adapter.kotlin.coroutines.CoroutineCallAdapterFactory
import okhttp3.Interceptor
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
Expand Down Expand Up @@ -36,7 +35,6 @@ val networkModule = module {
Retrofit.Builder()
.baseUrl(BuildConfig.BASE_URL)
.client(get())
.addCallAdapterFactory(CoroutineCallAdapterFactory())
.addConverterFactory(GsonConverterFactory.create())
.build()
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
package com.chintansoni.android.repositorypattern.model

import androidx.lifecycle.MutableLiveData
import kotlinx.coroutines.Deferred

abstract class NetworkBoundResource<LocalType, RemoteType> {

private val mutableLiveData = MutableLiveData<Resource<LocalType>>()

abstract suspend fun getRemoteAsync(): Deferred<RemoteType>
abstract suspend fun getRemoteAsync(): RemoteType

abstract suspend fun getLocal(): LocalType

Expand All @@ -22,7 +21,7 @@ abstract class NetworkBoundResource<LocalType, RemoteType> {
suspend fun fetch(isForced: Boolean) {
try {
mutableLiveData.postValue(Resource.Success(getLocal()))
val remoteData = getRemoteAsync().await()
val remoteData = getRemoteAsync()
saveCallResult(mapper(remoteData), isForced)
mutableLiveData.postValue(Resource.Success(getLocal()))
} catch (exception: Exception) {
Expand All @@ -33,7 +32,7 @@ abstract class NetworkBoundResource<LocalType, RemoteType> {
suspend fun getRemoteData(isForced: Boolean) {
try {
mutableLiveData.postValue(Resource.Loading())
val remoteData = getRemoteAsync().await()
val remoteData = getRemoteAsync()
saveCallResult(mapper(remoteData), isForced)
mutableLiveData.postValue(Resource.Success(getLocal()))
} catch (exception: Exception) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,14 @@ import com.chintansoni.android.repositorypattern.model.local.dao.UserDao
import com.chintansoni.android.repositorypattern.model.local.entity.User
import com.chintansoni.android.repositorypattern.model.remote.ApiService
import com.chintansoni.android.repositorypattern.model.remote.response.RandomUserResponse
import kotlinx.coroutines.Deferred

class UserRepository constructor(private var apiService: ApiService, private var userDao: UserDao) {


private var pageNumber: Int = 0
private var networkBoundSource: NetworkBoundResource<List<User>, RandomUserResponse> =
object : NetworkBoundResource<List<User>, RandomUserResponse>() {
override suspend fun getRemoteAsync(): Deferred<RandomUserResponse> {
override suspend fun getRemoteAsync(): RandomUserResponse {
return apiService.getUsers(pageNumber)
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
package com.chintansoni.android.repositorypattern.model.remote

import com.chintansoni.android.repositorypattern.model.remote.response.RandomUserResponse
import kotlinx.coroutines.Deferred
import retrofit2.http.GET
import retrofit2.http.Query

interface ApiService {

@GET("api")
fun getUsers(@Query("page") page: Int,
@Query("results") result: Int = 10,
@Query("lang") lang: String = "en"): Deferred<RandomUserResponse>
suspend fun getUsers(@Query("page") page: Int,
@Query("results") result: Int = 10,
@Query("lang") lang: String = "en"): RandomUserResponse
}