-
Notifications
You must be signed in to change notification settings - Fork 33
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
전남대 Android_오진우_3주차 과제_Step1 #70
base: fivejinw
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고생하셨어요 진우님! 전반적으로 아키텍쳐에 대한 학습을 더 하시면 큰 도움이 되지 않을까 싶습니다!
카카오API로 데이터를 받도록 바꾸다보니 원래의 PlaceRepository를 사용하지 않게 되었습니다. 이렇게 사용하지 않는 코드들은 모두 지워버리는 것이 좋은 지 궁금합니다!
데이터를 가지고 오는 목적지(data source 라고 부릅니다.) 가 달라졌기 때문에 PlaceRepository 는 그대로 두고, KakaoApiDataSource 로 처리하심이 좋습니다. 관심사 분리와 의존성 주입에 대해서 차근차근 찾아보시면 좋을 것 같네요 👍
buildConfigField("String", "KAKAO_LOCAL_API_KEY", gradleLocalProperties(rootDir, providers).getProperty("KAKAO_LOCAL_API_KEY")) | ||
buildConfigField("String", "KAKAO_BASE_URL", gradleLocalProperties(rootDir, providers).getProperty("KAKAO_BASE_URL")) | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
@SerializedName("road_address_name") val location : String, | ||
@SerializedName("category_group_name") val category : String |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Gson 을 사용한다면 null safety 하지 않을 수 있어요. 모두 null 처리해주시면 조금 더 안전하게 사용할 수 있어요.
fun getPlaceData( | ||
@Header("Authorization") key: String, | ||
@Query("query") query: String | ||
|
||
): Call<ResultSearch> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
suspend fun 으로 선언한다면 ResultSearch 를 그대로 받을 수 있습니다. Call 을 사용하는 것은 너무 오래전 사용방법이고, 깊은 callback 을 유발할 수 있기 때문에 선호되지 않습니다.
fun getPlaceData(text: String, callback: (List<Place>) -> Unit) { | ||
Log.d("inputField", "inputText : ${text} ") | ||
var placeList = listOf<Place>() | ||
val retrofitService = Retrofit.Builder() | ||
.baseUrl(BuildConfig.KAKAO_BASE_URL) | ||
.addConverterFactory(GsonConverterFactory.create()) | ||
.build() | ||
val kakaoApi = retrofitService.create(KakaoLocalApi::class.java) | ||
|
||
kakaoApi.getPlaceData(BuildConfig.KAKAO_LOCAL_API_KEY, text) | ||
.enqueue(object : Callback<ResultSearch> { | ||
override fun onResponse( | ||
call: Call<ResultSearch>, | ||
response: Response<ResultSearch> | ||
) { | ||
if (response.isSuccessful) { | ||
val body = response.body() | ||
Log.d("testt", "body : ${body?.documents}") | ||
placeList = body?.documents ?: listOf<Place>() | ||
Log.d("inputField", "placeList : ${placeList} ") | ||
callback(placeList) | ||
} | ||
} | ||
|
||
override fun onFailure(call: Call<ResultSearch>, t: Throwable) { | ||
Log.d("testt", "error : $t") | ||
Log.d("inputField", "placeList : ${placeList} ") | ||
callback(placeList) | ||
} | ||
}) | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
callback 으로는 잘 처리해주셨으나, kotlin coroutine 의 기능을 조금 더 잘 이용해보면 좋지 않을까 싶어요! 만약 모르신다면, 공부해보시면 큰 도움이 될 것 같습니다 :)
코드 작성하면서 어려웠던 점
멘토님께서 중점적으로 리뷰해주셨으면 하는 부분
추가로 궁금한 점
오늘도 코드리뷰 부탁드립니다!
언제나 감사드립니다 :)