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
5 changes: 4 additions & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ plugins {


Properties properties = new Properties()
properties.load(project.rootProject. file ('local.properties').newDataInputStream())
properties.load(project.rootProject.file('local.properties').newDataInputStream())

android {
namespace 'org.android.go.sopt'
Expand Down Expand Up @@ -46,6 +46,9 @@ android {
}

dependencies {
implementation 'com.jakewharton.timber:timber:4.7.1'
implementation 'androidx.activity:activity-ktx:1.4.0'
implementation 'androidx.fragment:fragment-ktx:1.4.0'
implementation 'androidx.core:core-ktx:1.9.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.8.0'
Expand Down
1 change: 1 addition & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<application
android:name=".GoSoptApplication"
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
Expand Down
15 changes: 15 additions & 0 deletions app/src/main/java/org/android/go/sopt/GoSoptApplication.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package org.android.go.sopt

import android.app.Application
import timber.log.Timber


class GoSoptApplication : Application() {
override fun onCreate() {
super.onCreate()

if (BuildConfig.DEBUG) {
Timber.plant(Timber.DebugTree())
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,13 @@ import android.util.Log
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import org.android.go.sopt.SignServicePool
import org.android.go.sopt.SignServicePool.imageService
import org.android.go.sopt.SoptServicePool
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response

class GalleryViewModel: ViewModel() {
private val service = SignServicePool.signService
private val service = SoptServicePool.imageService
private val _image = MutableLiveData<ContentUriRequestBody>()
val image: LiveData<ContentUriRequestBody>
get() = _image
Expand All @@ -21,7 +20,7 @@ class GalleryViewModel: ViewModel() {
fun uploadProfileImage() {
if (image.value == null) { /* 아직 사진이 등록되지 않았다는 로직 처리 */
} else {
imageService.uploadImage(image.value!!.toFormData()).enqueue(
service.uploadImage(image.value!!.toFormData()).enqueue(
object : Callback<Unit> {
override fun onResponse(call: Call<Unit>, response: Response<Unit>) {
if (response.isSuccessful)
Expand Down
46 changes: 8 additions & 38 deletions app/src/main/java/org/android/go/sopt/home/HomeFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,24 +5,24 @@ import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.activity.viewModels
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.ConcatAdapter
import androidx.recyclerview.widget.LinearLayoutManager
import kotlinx.coroutines.launch
import org.android.go.sopt.HomeServicePool
import org.android.go.sopt.R
import org.android.go.sopt.SoptServicePool
import org.android.go.sopt.databinding.FragmentHomeBinding
import org.android.go.sopt.model.ResponseHome
import retrofit2.Call
import retrofit2.Response
import org.android.go.sopt.sign.LoginViewModel

class HomeFragment : Fragment() {
private var _binding: FragmentHomeBinding? = null
private val binding: FragmentHomeBinding
get() = requireNotNull(_binding) { "앗 binding이 null 이다!" }
private val homeService = HomeServicePool.homeService

private val viewModel: HomeViewModel by viewModels()


override fun onCreateView(
Expand All @@ -40,40 +40,10 @@ class HomeFragment : Fragment() {
binding.rvHome.adapter = adapter
binding.rvHome.layoutManager = LinearLayoutManager(context)



lifecycleScope.launch {
kotlin.runCatching {
homeService.listuser()
}.fold(
{
homeadapter.submitList(it)
}, {
Log.d("aaa", "서버통신 실패")
}
)
viewModel.followList.observe(viewLifecycleOwner){followList ->
homeadapter.submitList(followList)
}


//
// homeService.listuser().enqueue(object : retrofit2.Callback<ResponseHome> {
// override fun onResponse(
// call: Call<ResponseHome>,
// response: Response<ResponseHome>,
// ) {
// if (response.isSuccessful) {
// response.body()?.data?.let {
// homeadapter.submitList(it)
// Log.d("listlist", it.toString())
// }
// }
// }
//
// override fun onFailure(call: Call<ResponseHome>, t: Throwable) {
//
// }
//
// })
}

override fun onDestroyView() {
Expand Down
37 changes: 37 additions & 0 deletions app/src/main/java/org/android/go/sopt/home/HomeViewModel.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package org.android.go.sopt.home

import android.util.Log
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.launch
import org.android.go.sopt.HomeServicePool.homeService
import org.android.go.sopt.model.ResponseHome
import timber.log.Timber

class HomeViewModel : ViewModel() {

private val _followList = MutableLiveData<List<ResponseHome.Data>>()
val followList: LiveData<List<ResponseHome.Data>> = _followList

init {
fetchFollowList()
}

private fun fetchFollowList() {
viewModelScope.launch {
kotlin.runCatching {
homeService.listuser()
}.fold(
{
_followList.value = it.data.toList()
}, {
Timber.e(it.message)

}
)
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -10,27 +10,21 @@ import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import org.json.JSONArray
import org.json.JSONObject
import org.android.go.sopt.remote.AuthInterceptor
import retrofit2.Retrofit

object SignApiFactory {
object ApiFactory {

private val client by lazy {
OkHttpClient.Builder().addInterceptor(HttpLoggingInterceptor().apply {
level =
if (BuildConfig.DEBUG) HttpLoggingInterceptor.Level.BODY else HttpLoggingInterceptor.Level.NONE
}).addInterceptor(AuthInterceptor()).build()

OkHttpClient.Builder()
.addInterceptor(AuthInterceptor())
.addInterceptor(
HttpLoggingInterceptor().apply {
level =
if (BuildConfig.DEBUG) HttpLoggingInterceptor.Level.BODY else HttpLoggingInterceptor.Level.NONE
}
).build()

}
// private val client by lazy {
// OkHttpClient.Builder()
// .addInterceptor(AuthInterceptor())
// .addInterceptor(
// HttpLoggingInterceptor().apply {
// level =
// if (BuildConfig.DEBUG) HttpLoggingInterceptor.Level.BODY else HttpLoggingInterceptor.Level.NONE
// }
// ).build()
//
// }

val retrofit: Retrofit by lazy {
Retrofit.Builder()
Expand All @@ -45,8 +39,10 @@ object SignApiFactory {
when {
message.isJsonObject() ->
Log.d("Retrofit2", JSONObject(message).toString(4))

message.isJsonArray() ->
Log.d("Retrofit2", JSONArray(message).toString(4))

else -> {
Log.d("Retrofit2", "CONNECTION INFO -> $message")
}
Expand All @@ -66,8 +62,7 @@ object SignApiFactory {
inline fun <reified T> create(): T = retrofit.create<T>(T::class.java)
}

object SignServicePool {
val signService = SignApiFactory.create<SignService>()

val imageService = SignApiFactory.create<ImageService>()
object SoptServicePool {
val signService = ApiFactory.create<SignService>()
val imageService = ApiFactory.create<ImageService>()
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
package org.android.go.sopt.remote

import android.util.Log
import okhttp3.Interceptor
import okhttp3.Response
import okhttp3.logging.HttpLoggingInterceptor
import org.android.go.sopt.ApiFactory.isJsonArray
import org.android.go.sopt.ApiFactory.isJsonObject
import org.json.JSONArray
import org.json.JSONObject

class AuthInterceptor : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
Expand All @@ -11,4 +17,7 @@ class AuthInterceptor : Interceptor {
.build()
return chain.proceed(headerRequest)
}


}

42 changes: 26 additions & 16 deletions app/src/main/java/org/android/go/sopt/remote/HomeApiFactory.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ package org.android.go.sopt
import android.util.Log
import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory
import kotlinx.serialization.json.Json
import okhttp3.Interceptor
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
Expand All @@ -14,32 +15,41 @@ import retrofit2.Retrofit

object HomeApiFactory {

// private val client by lazy {
// OkHttpClient.Builder().addInterceptor(HttpLoggingInterceptor().apply {
// level =
// if (BuildConfig.DEBUG) HttpLoggingInterceptor.Level.BODY else HttpLoggingInterceptor.Level.NONE
// }).addInterceptor(AuthInterceptor()).build()
//
// OkHttpClient.Builder()
// .addInterceptor(AuthInterceptor())
// .addInterceptor(
// HttpLoggingInterceptor().apply {
// level =
// if (BuildConfig.DEBUG) HttpLoggingInterceptor.Level.BODY else HttpLoggingInterceptor.Level.NONE
// }
// ).build()
// }


val retrofit: Retrofit by lazy {
Retrofit.Builder()
.baseUrl(BuildConfig.REQRES_BASE_URL)
.addConverterFactory(Json.asConverterFactory("application/json".toMediaType()))
.client(client)
.build()
}

private fun getLogOkHttpClient(): Interceptor {

val interceptor = HttpLoggingInterceptor { message ->
when {
message.isJsonObject() ->
Log.d("Retrofit2", JSONObject(message).toString(4))
message.isJsonArray() ->
Log.d("Retrofit2", JSONArray(message).toString(4))
else -> {
Log.d("Retrofit2", "CONNECTION INFO -> $message")
}
}
}
interceptor.level = HttpLoggingInterceptor.Level.BODY
return interceptor
}

fun String?.isJsonObject(): Boolean = this?.startsWith("{") == true && this.endsWith("}")
fun String?.isJsonArray(): Boolean = this?.startsWith("[") == true && this.endsWith("]")

private val client = OkHttpClient.Builder()
.addInterceptor(getLogOkHttpClient())
.build()

inline fun <reified T> create(): T = retrofit.create<T>(T::class.java)

}

object HomeServicePool {
Expand Down
10 changes: 5 additions & 5 deletions app/src/main/java/org/android/go/sopt/remote/Service.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,21 @@ import retrofit2.http.*

interface SignService {
@POST("sign-up")
fun signup(
suspend fun signup(
@Body request: RequestSignUpDto
): Call<ResponseSignUpDto>
): ResponseSignUpDto

@POST("sign-in")
fun signin(
suspend fun signin(
@Body request: RequestLogin
): Call<ResponseLogin>
): ResponseLogin
}

interface HomeService {
@GET("/api/users")
suspend fun listuser(
@Query("page") page: Int = 2
): List<ResponseHome.Data>
): ResponseHome
}

interface ImageService {
Expand Down
Loading