diff --git a/app/src/main/java/com/sopt/now/data/module/ApiFactory.kt b/app/src/main/java/com/sopt/now/data/module/ApiFactory.kt index b293622..b87fdae 100644 --- a/app/src/main/java/com/sopt/now/data/module/ApiFactory.kt +++ b/app/src/main/java/com/sopt/now/data/module/ApiFactory.kt @@ -8,6 +8,7 @@ import kotlinx.serialization.json.Json import okhttp3.MediaType.Companion.toMediaType import okhttp3.OkHttpClient import retrofit2.Retrofit +import retrofit2.create object ApiFactory { private const val BASE_URL: String = BuildConfig.AUTH_BASE_URL @@ -31,11 +32,11 @@ object ApiFactory { .build() } - inline fun createBase(): T = baseRetrofit.create(T::class.java) - inline fun createFollower(): T = followerRetrofit.create(T::class.java) + inline fun createBaseRetrofit(): T = baseRetrofit.create() + inline fun createFollowerRetrofit(): T = followerRetrofit.create() } object ServicePool { - val authService = ApiFactory.createBase() - val followerService = ApiFactory.createFollower() + val authService = ApiFactory.createBaseRetrofit() + val followerService = ApiFactory.createFollowerRetrofit() } \ No newline at end of file diff --git a/app/src/main/java/com/sopt/now/repository/FollowerRepository.kt b/app/src/main/java/com/sopt/now/repository/FollowerRepository.kt new file mode 100644 index 0000000..45ec7ec --- /dev/null +++ b/app/src/main/java/com/sopt/now/repository/FollowerRepository.kt @@ -0,0 +1,17 @@ +package com.sopt.now.repository + +import com.sopt.now.data.model.UserDataResponse +import com.sopt.now.data.module.ServicePool +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import retrofit2.Response + +class FollowerRepository { + private val followerService = ServicePool.followerService + + suspend fun getUserList(page: Int): Response { + return withContext(Dispatchers.IO) { + followerService.getUserList(page).execute() + } + } +} diff --git a/app/src/main/java/com/sopt/now/ui/home/HomeFragment.kt b/app/src/main/java/com/sopt/now/ui/home/HomeFragment.kt index bcdaa64..303d55c 100644 --- a/app/src/main/java/com/sopt/now/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/sopt/now/ui/home/HomeFragment.kt @@ -39,9 +39,9 @@ class HomeFragment : Fragment() { setCollect() } - override fun onDestroy() { + override fun onDestroyView() { _binding = null - super.onDestroy() + super.onDestroyView() } private fun setCollect() { @@ -56,8 +56,7 @@ class HomeFragment : Fragment() { private fun setAdapter() { val friendAdapter = ItemAdapter(viewModel.friendList) - binding.rvFriends.layoutManager = LinearLayoutManager(requireContext()) binding.rvFriends.adapter = friendAdapter } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/sopt/now/ui/home/viewModel/HomeViewModel.kt b/app/src/main/java/com/sopt/now/ui/home/viewModel/HomeViewModel.kt index 7d6c591..3ecedad 100644 --- a/app/src/main/java/com/sopt/now/ui/home/viewModel/HomeViewModel.kt +++ b/app/src/main/java/com/sopt/now/ui/home/viewModel/HomeViewModel.kt @@ -1,23 +1,27 @@ package com.sopt.now.ui.home.viewModel -import android.util.Log +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope import com.sopt.now.R import com.sopt.now.data.model.ItemData import com.sopt.now.data.model.UserData -import com.sopt.now.data.model.UserDataResponse -import com.sopt.now.data.module.ServicePool +import com.sopt.now.repository.FollowerRepository import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow -import retrofit2.Call -import retrofit2.Callback -import retrofit2.Response +import kotlinx.coroutines.launch +import java.io.IOException class HomeViewModel : ViewModel() { - private val followerService by lazy { ServicePool.followerService } + private val followerRepository = FollowerRepository() private val _followerState = MutableStateFlow>(emptyList()) val followerState = _followerState.asStateFlow() + private var _eventNetworkError = MutableLiveData(false) + val eventNetworkError: LiveData + get() = _eventNetworkError + private var _isNetworkErrorShown = MutableLiveData(false) val friendList = mutableListOf( ItemData.MyProfile( @@ -32,28 +36,38 @@ class HomeViewModel : ViewModel() { } private fun fetchFollowerList() { - followerService.getUserList(page = 0).enqueue(object : Callback { - override fun onResponse( - call: Call, - response: Response, - ) { + viewModelScope.launch { + try { + val response = followerRepository.getUserList(0) if (response.isSuccessful) { - val data = response.body()?.data - if (data != null) { + response.body()?.data?.let { data -> _followerState.value = data mapFollowersToFriendList(data) - Log.d("FOLLOWER", "$data") } + _eventNetworkError.value = false + _isNetworkErrorShown.value = false + } else { + _eventNetworkError.value = true } + } catch (networkError: IOException) { + _eventNetworkError.value = true } + } + } - override fun onFailure(call: Call, t: Throwable) { - Log.e("HomeError", "${t.message}") - } - }) + fun onNetworkErrorShown() { + _isNetworkErrorShown.value = true } - fun mapFollowersToFriendList(followers: List) { + private fun mapFollowersToFriendList(followers: List) { + friendList.clear() + friendList.add( + ItemData.MyProfile( + profileImage = R.drawable.img_arin, + name = "김아린", + description = "업보 청산 중..", + ), + ) friendList.addAll(followers.map { follower -> ItemData.Friend( profileImage = follower.avatar, @@ -62,4 +76,4 @@ class HomeViewModel : ViewModel() { ) }) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/sopt/now/ui/myPage/viewModel/MyPageViewModel.kt b/app/src/main/java/com/sopt/now/ui/myPage/viewModel/MyPageViewModel.kt index f8ced4e..9b55f15 100644 --- a/app/src/main/java/com/sopt/now/ui/myPage/viewModel/MyPageViewModel.kt +++ b/app/src/main/java/com/sopt/now/ui/myPage/viewModel/MyPageViewModel.kt @@ -1,6 +1,5 @@ package com.sopt.now.ui.myPage.viewModel -import android.util.Log import androidx.lifecycle.ViewModel import com.sopt.now.data.model.ResponseInfoDto import com.sopt.now.data.model.UserInfo @@ -46,7 +45,6 @@ class MyPageViewModel : ViewModel() { } override fun onFailure(call: Call, t: Throwable) { - Log.e("MyPageError", "${t.message}") } }) }