android 12

[Retrofit] java.lang.IllegalStateException: Expected Android API level 21+ but was 29 에러 해결

애플리케이션을 개발하는 동안 전혀 발생하지 않았던 다음 에러가 스토어에 출시하자마자 발생하였습니다. java.lang.ExceptionInInitializerError at okhttp3.internal.platform.Platform.get(Platform.java:85) at okhttp3.OkHttpClient.newSslSocketFactory(OkHttpClient.java:263) at okhttp3.OkHttpClient.(OkHttpClient.java:229) at okhttp3.OkHttpClient$Builder.build(OkHttpClient.java:1015) at com.myhome.smoketimer.repository.retrofit.RetrofitAPI.(RetrofitA..

[Android-spring boot] ResponseBody로 String반환 시 발생 오류

안녕하세요. 오늘은 클라이언트-서버 통신 과정에서 발생한 오류에 대해 적어볼까 합니다. 이번 문제는 aws s3에 이미지를 저장하고 반환받은 url을 클라이언트로 반환하는 과정에서 발생하였는데요 ! Rest API의 controller에서 url을 클라이언트 측으로 String 형식으로 전달하는 과정에서 아래와 같은 예외를 맞이하게 되었습니다..(안드로이드에서의 통신은 Retrofit 라이브러리를 사용합니다.) com.google.gson.stream.MalformedJsonException: Expected value at line 1 column 6 path $ retrofit. 구글링을 하면서 여러가지 방법을 적용해보면서 원인을 파악해 보았는데 정확한 원인을 파악할 수는 없었습니다. ㅠㅠㅠ 하지만 ..

[MVVM 적용기] LiveData와 Databinding

안녕하세요. 오랜만에 글로 찾아뵙네요..ㅎㅎ 그동안 인턴십을 수행하면서 얻은 결과를 정리하느라 글을 못썼네요..ㅠㅠ 안드로이드 개발 인턴십을 통해 MVVM, AAC, RxJava, DI, Test에 대한 내용을 배웠고 앞으로 제가 정리한 내용을 공유하려 합니다. 먼저 제가 이전에도 다뤘던 MVVM과 Databinding에 대해 다시 한번 정리하는 시간을 갖도록 하겠습니다. 우선 제가 그동안 잘못 이해해온 부분부터 정리하도록 하겠습니다. 기본적으로 아래 두 게시물의 내용을 모두 이해하고 계신것으로 간주하고 시작해보겠습니다 ! in-idea.tistory.com/37 [안드로이드] 데이터바인딩 적용하기 안녕하세요. 이번시간에는 안드로이드 MVVM 디자인 패턴을 적용하기 위한 데이터바인딩에 대해 알아보려고 합..

[안드로이드] Viewpager와 indicator를 한번에 !!

우리는 간단하게 이미지를 나열하기 위하여 Viewpager를 사용합니다. 그렇다면 인스타그램처럼 여러 사진을 게시물로 게시할 때 아래와 같이 viewpager와 indicator를 함께 사용하기 위해서는 어떻게 해야 할까요?? (실제로는 react로 구현된 다른 라이브러리일 것입니다. 안드로이드의 예시..!) 아마 ViewPager를 만들고 indicator라이브러리를 사용하여 둘 사이의 listener 또는 callback을 달아줘야 할 입니다. 이러한 과정을 간소화한다면 어떨까라는 생각과 함께 viewpager와 indicator를 한 번에 생성할 수 있는 라이브러리를 만들게 되었습니다. 라이브러리의 이름은 SIViewPager..! build.gradle에서 의존성만 추가하면 바로 사용하실 수 있습..

Retrofit을 적용해서 데이터 불러오기

그동안 서버 데이터 불러오기 작업을 하면서 AsyncTask를 통해 백그라운드 처리를 하고 HttpURLConnection객체를 사용해 API매핑을 하였습니다. 긴 코드와 재활용할 수 있어 보이는 코드를 보며 서버 요청 라이브러리가 있으면 좋을 것 같다는 생각을 하였는데 아니나 다를까 많이 들어보던 Retrofit이라는 라이브러리가 바로 그것이었습니다. 오늘은 Retrofit을 통하여 서버에서 데이터 요청을 하고 커스텀 객체에 적용하는 실습을 진행해보도록 하겠습니다. 우선 gradle 종속성을 추가합니다. implementation 'com.squareup.retrofit2:retrofit:2.4.0' implementation 'com.squareup.retrofit2:converter-gson:2.4..

[Android] RecyclerView 무한스크롤(endless scroll) 만들기

안녕하세요. godsangin입니다. 혹시 페이스북, 인스타그램에서 게시물을 내리면 계속해서 새로운 게시물을 로딩하는 구성을 보신적이 있으신가요 ?? 오늘은 그와 같이 특정 아이템으로 구성된 AdapterView를 endless하게 구현하는 방법에 대하여 알아보도록 하겠습니다. 서버에서 데이터 불러오기 예제를 참고하시면 도움이 될 것 같습니다. https://in-idea.tistory.com/22 [Android] 서버에서 데이터 불러오기 안녕하세요. godsangin입니다. 오랜만에 글을 올리게 되었는데요. 최근에 GCP(Google Cloud Platform)을 사용해 보는 관계로 이런 저런 시행착오가 있어서 글을 못썼습니다...ㅠㅠ 오늘은 서버에서 데이터를 불러.. in-idea.tistory.c..

[Android] Glide 라이브러리 gif파일 로드

오늘은 ImageView에 url로 이루어진 데이터를 바인드하기 위해서 자주 사용하는 Glide라이브러리에 대한 내용입니다. gif파일을 로드하는 방법에 대한 자료는 많지만 여러가지 이미지로 이루어진 gif의 애니메이션 효과를 컨트롤할 수 있는 자료가 많이 없는 것 같습니다..ㅜㅜ 우선 저는 gif파일의 모든 이미지를 한번씩 로드하고(움짤처럼 재생됩니다.) 해당 이미지뷰를 사라지게 하는 기능이 필요하여 구현하게 되었습니다. implementation 'com.github.bumptech.glide:glide:4.9.0' 우선 build.gradle에 추가해야하는 glide 버전입니다. 저와 버전이 다르다면 DrawableImageViewTarget 또는 Animatable2Compat, GifDrawab..

[Android] 키보드 앱 만들기 후기

안녕하세요 godsangin입니다. 약 3주에 거쳐 키보드 앱 개발하는 과정을 포스팅하게 되었는데요. 블로그 글은 처음 써본 관계로 여러가지 시행착오가 많았던 것 같습니다. 처음 InputMethodService에서 InputConnection을 가져오는 과정에서부터 직접 만든 한글, 영어, 특수문자 등의 키보드에 직접 적용시키는 것 까지. 여러분들은 본인만의 키보드를 잘 만들 수 있었나요 ?? 만약 힘드셨다면 저에게 피드백을 남겨주세요..ㅠㅠ 저 또한 키보드에 대해 공부하면서 개발하였기 때문에 아직까지도 코드가 깔끔하지 않고, 천지인 키보드 같은 경우에는 낯선 문자가 발견되거나, 널문자가 포함되어 카톡을 보내거나 인터넷 검색을 할 경우에 이상한 유니코드가 발견되는 등 많은 수정해야할 사항이 존재합니다...

[Android] 커스텀 키보드 만들기(3/4) - 쿼티 키보드 만들기

지난 시간에 이어 오늘은 한글 오토마타를 생성하여 한글 키보드를 만들어 보도록 하겠습니다. 한글 키보드는 대부분의 키보드가 쿼티 키보드를 기반으로 하기 때문에 쿼티 키보드 제작을 기반으로 하였습니다. 영어 키보드와 마찬가지로 작성한 코드에 commit할 때 HangulMaker라는 커스텀 클래스를 만들어 사용하는 방법입니다. val numpadText = listOf("1","2","3","4","5","6","7","8","9","0") val firstLineText = listOf("ㅂ","ㅈ","ㄷ","ㄱ","ㅅ","ㅛ","ㅕ","ㅑ","ㅐ","ㅔ") val secondLineText = listOf("ㅁ","ㄴ","ㅇ","ㄹ","ㅎ","ㅗ","ㅓ","ㅏ","ㅣ") val thirdLineText..

[Android] 커스텀 키보드 만들기(2/4) - 영문 키보드 만들기

앞서 말씀드렸듯이 KeyboardView와 Keyboard를 사용하지 않기 위하여 새로운 레이아웃을 정의하고 바인드하는 작업이 필요합니다. 첫번째로 Layout을 작성해야합니다. 키 패드는 재활용 가능성이 다분하기 때문에 키패드 레이아웃을 따로 작성하였습니다. 키 패드는 실제로 키 버튼이 들어갈 Button과 Button 오른쪽 위로 롱 클릭 시 작성될 특수문자, DELETE 버튼에 사용될 ImageView로 구성되어있습니다.(레이아웃 이름은 keyboard_item입니다) 그리고 이 키 패드를 include하는 실제 keyboardView를 작성합니다.(레이아웃 이름은 keyboard_action입니다) 위와 같이 4개의 큰 LinearLayout으로 정의되어 있습니다. 다음으로 코드를 작성해 보겠습니..