본문 바로가기

전체 글100

안드로이드 코틀린 API 사용 중에 java.lang.IllegalArgumentException: Unable to create converter for class [클래스 경로] 뜨는 이유 유튜브 api를 쓰는데 java.lang.IllegalArgumentException이 자꾸 뜬다. 분명 api 응답에 맞게 클래스를 맞추고 @SerializeName으로 지정까지 해줬는데 말이다. 알고보니 @SerializeName을 복붙하고 수정해야하는데 복붙만 해놓고 수정을 안해서 그런거 였다.... 이런 멍청한 실수를.. 혹여나 api쓰다가 저 오류가 나면 클래스 이름이 맞나 잘 확인해보자. 2024. 2. 8.
TIL: Companion Object와 Object의 차이 Object Object는 싱글톤 패턴을 쉽게 사용할 수 있게 해준다. 초기화 시점은 object가 사용되는 시점이다. 특징으로는 thread safe 하다. thread safe란? 여러 스레드가 한 객체를 동시에 참조해도 실행에 문제가 없는 것을 말한다. 이해하기 힘들다면 thread safe하지 않은 예시를 보면 된다. public class CountingTest { public static void main(String[] args) { Count count = new Count(); for (int i = 0; i < 100; i++) { new Thread(){ public void run(){ for (int j = 0; j < 100; j++) { System.out.println(cou.. 2024. 2. 5.
[안드로이드/코틀린] 카카오 API (해시 키)hashkey 얻는 법 카카오 api를 과제로 쓰려는데 사용하려면 등록을 해야한다고 한다. 등록을 해보자. https://developers.kakao.com/ 로 접속 내 어플리케이션 -> 어플리케이션 추가하기 -> 추가된 앱 클릭 -> 플랫폼을 클릭하면 해당 화면이 나올 것이다. 필자는 이미 안드로이드를 등록해놨다. 아래 ios나 web처럼 등록버튼이 보일 것이다. 클릭 ㄱㄱ 이런 화면이 나올 것이다. 마켓 url은 플레이 스토어에 등록을 해놨다면 작성한다. 필자는 연습 과제이므로 등록하지 않으므로 공란으로 두었다. 여기서 키 해시 라는 말을 볼 수 있는데 이 포스트를 쓴 이유다. 키 해시는 api키가 아니다. 처음에 나는 저 2개가 같은 건줄 알았는데 검색해보니 그게 아니였다. 키해시를 알 수 있는 방법1 import c.. 2024. 2. 2.
TIL: 프래그먼트에서 키보드 숨기기 private fun hideKeyboard(){ val imm = requireActivity().getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager imm.hideSoftInputFromWindow(binding.etSearch.windowToken, 0) } 액티비티에서 실행되는 것이기 때문에 requireActivity() 다음에 써줘야한다. 해당 코드를 프래그먼트에 삽입하고 hideKeyboard()로 사용하면 된다. 2024. 2. 1.
카카오 API 이미지 검색 삽질 기록 api로 이미지 검색 결과를 받는데 자꾸 결과에 널이 뜬다.... 이상하다. 뭐가 문제지? 했는데 interface에 반환타입 KakaoImg가 문제였다. KakaoImg클래스와 APIResponse 클래스는 구조는 같다. 다만 KakaoImg 가 APIResponse 를 한번 더 감싼 형태라서 정보를 담아내지 못헀던 것이다. 반환타입을 APIResponse으로 바꾸니 바로 되었다. 아래는 그 당시 코드. interface interface KakaoImageAPI { @GET("v2/search/image") suspend fun getPost( @Header("Authorization") apiKey : String, @Query("query") searchKeyword: String ) : Kaka.. 2024. 1. 30.
[안드로이드/코틀린] 키보드 사라지게 하기 프래그먼트에서 버튼 클릭 시 키보드화면을 사라지게 하는게 목적이였는데 검색해보니 프래그먼트에서는 불가능하다고 한다. 액티비티까지 올라갸아 한다. override fun dispatchTouchEvent(ev: MotionEvent?): Boolean { val imm: InputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager imm.hideSoftInputFromWindow(currentFocus?.windowToken, 0) return super.dispatchTouchEvent(ev) } 처음엔 프래그먼트에 리스너를 인터페이스로 만들어서 액티비티까지 연결해줄려 했는데 context 문제 때문에 해.. 2024. 1. 30.
BuildConfig.DEBUG 임포트가 안될 때. 빨간 줄 뜰 때. private fun createOkHttpClient(): OkHttpClient{ val interceptor = HttpLoggingInterceptor() if(BuildConfig.DEBUG){ interceptor.level = HttpLoggingInterceptor.Level.BODY } else { interceptor.level = HttpLoggingInterceptor.Level.NONE } return OkHttpClient.Builder() .connectTimeout(20,TimeUnit.SECONDS) .readTimeout(20,TimeUnit.SECONDS) .writeTimeout(20,TimeUnit.SECONDS) .addNetworkInterceptor(interc.. 2024. 1. 29.
[안드로이드 코틀린] java.net.UnknownServiceException: CLEARTEXT communication to "XXXXXX" not permitted by network security policy java.net.UnknownServiceException: CLEARTEXT communication to apis.data.go.kr not permitted by network security policy api 예제 코드를 복붙하고 실행해보는데 저런 에러가 떴다. 컴파일러에서는 문제없다고 뜨는데 뭐가 문젠가 해서 저 경고를 구글에 검색해보니 https 통신을 강제하기 때문이라고 한다. base url을 보니 http로 되어있었다. 근데 분명 해당 api에는 http로 되어있던데.... https도 지원하는건가? 해당 url을 인터넷 주소창에 입력하면 http, https 둘 다 뜨긴한다. 그래서 baseUrl()에 들어갈 주소에 https로 바꿔적으니 문제없이 돌아갔다. 둘다 지원하기 때문에 되는.. 2024. 1. 26.
TIL : API(Application Programming Interface) 서버에 있는 리소스를 클라이언트가 활용할 수 있도록 만든 인터페이스이다. 예를 들면 로아의 아이스팽을 예로 들 수 있겠다. 효율적으로 아이템을 세팅해주는 웹페이지이다. 하지만 생각해보면 이상하다. 게임 내 서버에 데이터가 저장되어 있을 것이고 게임이라는 클라이언트를 통해 해당 데이터를 불러온다. 이 아이스팽에 나오는 정보들은 게임 안에서만 확인가능한 정보들이다. 어떻게 웹페이지에서 검색하고 볼 수 있는 것일까? 위 질문에 대한 대답이 API 이다. 클라이언트(웹페이지)가 게임 내 서버로부터 데이터를 불러와 가공하여 사용자에게 보여주는 것이다. 물론 그 데이터를 활용하는 것은 전적으로 제작자의 역량에 따라 다를 것이다.... 날씨앱이나 아이스팽의 경우처럼 서버 안에 있는 데이터를 불러와 자유롭게 활용할 수.. 2024. 1. 25.