분류 전체보기
-
[Android] 카카오 로그인 실패 시 해결방법Andorid 2022. 3. 29. 23:55
앱 출시를 위해 구글 플레이스토어에 개발자로 등록한 후 내부 테스트를 위해 release 방식으로 컴파일 후 카카오 로그인을 시도해보니, 이전에 debug 모드에서 잘만 수행되었던 카카오 로그인에 실패하였다. 웹에서 정보를 찾아보니 이 문제는 다른 개발자들도 흔히 겪는 문제인 것 같았다. https://developers.kakao.com/docs/latest/ko/getting-started/sdk-android#add-key-hash Kakao Developers 카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다. developers.kakao.com 카카오 로그인의 공식 문서에 따르면, 카카오 로그인에 사용되는..
-
[Android Hilt] Hilt 적용 중 > A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution > java.lang.reflect.InvocationTargetException (no error message) 에러 해결Andorid 2022. 3. 29. 23:35
Hilt를 적용하기 위해 애플리케이션 클래스에 어노테이션을 다음과 같이 달았다. @HiltAndroidApp class SocketApplication : Application() { companion object { var appContext : Context? = null } override fun onCreate() { super.onCreate() appContext = this KakaoSdk.init(this,getString(R.string.kakao_app_key)) } } 그러자 빌드에 실패한 뒤 다음과 같은 오류가 떴다. Execution failed for task ':app:kaptDebugKotlin'. > A failure occurred while executing org.je..
-
[Android] 위에서 아래로 꺼지는 애니메이션 만들기Andorid 2022. 3. 29. 23:32
액티비티가 현재 화면에서 아래로 꺼지고 다음 액티비티는 그대로 있는 애니메이션을 적용하려고 했다. fun sinkFromTop() { overridePendingTransition(R.anim.slide_bottom_enter,R.anim.stay) } 현재 액티비티가 아래로 꺼지는 애니메이션이어야 하므로, 위와 같이 작성하고 실행하였다. 땅으로 꺼지는 형태의 애니메이션은 적용되었으나, 이상하게도 이후에 등장할 새 액티비티에 해당 애니메이션이 적용되어 버렸다. fun sinkFromTop() { overridePendingTransition(R.anim.stay,R.anim.slide_bottom_enter) } 이번엔 위와 같이 적용하여 실행해보니 이번엔 애니메이션이 아예 적용되지 않았다. 긴 시행착오..
-
[Android Retrofit2] java.lang.IllegalArgumentException: Non-body HTTP method cannot contain @Body. 오류 해결Andorid 2022. 3. 29. 22:26
Retrofit2를 사용하여 DELETE 요청을 구현하던 중 다음 과 같은 에러가 발생하였다. 💡 java.lang.IllegalArgumentException: Non-body HTTP method cannot contain @Body. 기존 소스코드는 다음과 같다. @DELETE("api/member/") fun unregisterMember(@Header("serverToken") serverToken:String,@Body body: LoginRequestDto):Call 스택오버플로우를 검색한 결과, 코드를 다음으로 수정하니 바르게 동작하였다. @HTTP(method = "DELETE", path="api/member/",hasBody = true) fun unregisterMember(@Hea..
-
[Android]다이얼로그 크기 조정 및 테두리 둥글게 만들기Andorid 2022. 3. 29. 22:25
안드로이드에서 다이얼로그를 만들고자 이전 자바에서 하던 방식 그대로 Dialog 클래스를 상속받으려고 했으나, 일반적으로 DialogFragment가 더 많이 사용되는 듯 하여 해당 방식을 사용하기로 하였다. 그러나 한 가지 문제에 봉착했는데, 다이얼로그의 크기가 원하는 비율로 표시되지 않는다는 점이었다. 그래서 파라미터로 context를 받고, 해당 context의 windowManager를 접근하여 기기의 너비 및 높이를 구했다. val windowManager = mContext.getSystemService(Context.WINDOW_SERVICE) as WindowManager val display = windowManager.defaultDisplay val size = Point() disp..
-
java.lang.IllegalArgumentException: Non-body HTTP method cannot contain @Body. 오류 해결Andorid 2022. 2. 6. 01:12
Retrofit2를 사용하여 DELETE 요청을 구현하던 중 다음 과 같은 에러가 발생하였다. 💡 java.lang.IllegalArgumentException: Non-body HTTP method cannot contain @Body. 기존 소스코드는 다음과 같다. @DELETE("api/member/") fun unregisterMember(@Header("serverToken") serverToken:String,@Body body: LoginRequestDto):Call 스택오버플로우를 검색한 결과, 코드를 다음으로 수정하니 바르게 동작하였다. @HTTP(method = "DELETE", path="api/member/",hasBody = true) fun unregisterMember(@Hea..
-
다이얼로그 크기 조정 및 테두리 둥글게 만들기Andorid 2022. 2. 6. 01:11
안드로이드에서 다이얼로그를 만들고자 이전 자바에서 하던 방식 그대로 Dialog 클래스를 상속받으려고 했으나, 일반적으로 DialogFragment가 더 많이 사용되는 듯 하여 해당 방식을 사용하기로 하였다. 그러나 한 가지 문제에 봉착했는데, 다이얼로그의 크기가 원하는 비율로 표시되지 않는다는 점이었다. 그래서 파라미터로 context를 받고, 해당 context의 windowManager를 접근하여 기기의 너비 및 높이를 구했다. val windowManager = mContext.getSystemService(Context.WINDOW_SERVICE) as WindowManager val display = windowManager.defaultDisplay val size = Point() disp..
-
함수개발 팁 2022. 1. 13. 19:47
작게 만들어라 함수는 작을 수록 좋다 블록과 들여쓰기 조건문 및 반복문에 들어가는 블록은 한 줄이어야 한다. 중첩 구조가 생길 만큼 함수가 커져서는 안된다는 뜻 그래야 읽고 이해하기 쉬워진다. 한 가지만 해라 함수는 한 가지만 해야한다. 다른 표현이 아니라 의미 있는 이름으로 다른 함수를 추출할 수 있다면 그 함수는 여러 작업을 하는 함수다. 함수 당 추상화 수준은 하나로 함수가 한 가지 작업만 하려면 함수 내 모든 문장의 추상화 수준이 동일해야 한다. 한 함수 내에 추상화 수준을 섞으면 코드를 읽는 사람이 헷갈린다. 코드는 위에서 아래로 이야기처럼 읽혀야 좋다. 좋은 함수는 위에서 아래로 읽으면서 함수 추상화 수준이 한 단계씩 낮아진다. ex)TO 설정 페이지와 해제 페이지를 포함하려면,설정 페이지를 ..
-
의미 있는 이름개발 팁 2022. 1. 10. 22:54
클린 코드의 첫 장은 의미 있는 이름을 짓는 것으로부터 시작한다. 개발을 진행하며 발생한 수없는 버그와 어떻게 하면 좀 더 효율적인 알고리즘을 짤 수 있을까하는 고민으로 고통받아왔던 사람이라면, 고작 이름을 잘 짓는 것이 무슨 대수냐고 반문할 지 모르겠다. 하지만 내 경험에 의하면 의미없는 이름을 짓는 것이 개발을 진행하는데에 있어서 꽤 큰 장애물이 되는 것을 알기에 한 번쯤 읽어본다면 도움이 될 것이라고 생각한다. 그러나 책의 모든 내용을 옮기는 데에는 시간이 걸리기 때문에, 내가 공감한 내용만 가볍게 추려보려고 한다. 의도를 분명히 밝혀라 -변수나 함수,클래스 이름을 지을 때에는 주석이 필요없을 정도로 의미를 명확하게 전달하는 이름이 좋다. -의도가 드러나는 이름을 사용하면 코드의 이해와 변경이 쉬워..
-
[Robolectric] ActivityScenario 오류- java.lang.RuntimeException: Unable to resolve activity for IntentTDD 2021. 8. 12. 22:49
Robolectric을 다시 배워보고자 공부를 시작했다. Activity에서 사용하는 findViewById를 ActivityScenario에서 제공한다는 것을 알게되었고, 예제를 그대로 따라서 작성하였다. 그리고 부푼 마음으로 테스트를 실행해본 결과는 나의 기대와 달리 실패였고, 나는 다음과 같은 오류를 만나게 되었다. java.lang.RuntimeException: Unable to resolve activity for Intent { cmp=xxxxxxxx/.pos.test.TestMainActivity } -- see https://github.com/robolectric/robolectric/pull/4736 for details at org.robolectric.android.fakes.Ro..