본문 바로가기

Android

(43)
사용 중인 네트워크의 타입 파악하기 앱을 리팩토링해도 계속 DNS 오류가 발생한다. 미치겠네ㅋㅋ 원인이 뭔지 일단 서버에 로그를 남겨서 데이터를 수집해 보려한다. 데이터에 이것저것 다 집어 넣는 중인데, 그 중 사용자가 이용 중인 네트워크의 종류를 포함사키는 것이 좋을 것 같다고 생각했다. wifi에서 cellular로 넘어갈때 발생하는 문제일까...? 아무튼 하단 코드는 네트워크 상태를 String으로 반환해 주는 코드이다. @SuppressLint("MissingPermission") fun getNetworkType(context: Context): String { val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as Connectivit..
[Android: Basic] Spinner Dropdown DropDown Spinner 아래의 이미지 처럼 터치했을 때, 값을 사용자가 선택할 수 있도록 목록 형태로 펼쳐지는 것을 드롭다운(Drowdown) 이라고 한다. 안드로이드에서 드롭다운은 스피너(Spinner) 를 이용해 구현할 수 있다. 이번 포스팅에서는 스피너를 구현하는 방법과 커스텀하는 방법에 대해 알아보겠다. ViewBinding 환경을 고려하고 작성된 글이다. 완성본 아래 과정을 통해 완성될 결과물을 먼저 살펴보자. 간단하게 드롭다운에서 아이템을 선택하면 그에 따라 텍스트가 바뀌는 예제다. 코드 전문은 아래 깃허브 저장소에서 확인 가능하다. 깃허브 링크 💻 Code ‣ Layout resource dropDownWidth와 dropDownVertivalOffset에 대해서 알아보겠다. drop..
[Android: CS] Dalvik vs ART ART(Anroid Run Time)는 Android 4.4(Api 19)에서 처음으로 등장했으며, 해당 버전에서는 Dalvik과 함께 선택적으로 사용이 가능했다. 하지만 Android 5.0(Api 21) 이상 버전에서는 ART가 기본 런타임 환경으로 자리잡았다. 두가지 방식의 가장 큰 차이점은 컴파일 방식이다. Dalvik은 JIT(Just-In-Time) 방식을 사용하고, ART는 AOT(Ahead-Of-Time) 방식을 사용(Android 7부터는 AOT와 JIT의 조합)한다. 두 방식을 간략하게 살펴보면 다음과 같다. JIT(Jus-In-Time) 앱 실행 시 컴파일 설치 시 컴파일을 하지 않기 때문에 AOT보다 설치 속도가 빠르다. 실행 시 컴파일을 하기 때문에 AOT에 비해 실행 속도가 느림..
안드로이드 인터넷 연결상태 체크: HttpURLConnection 객체 이용 들어가며.. 글로벌 서비스를 담당하다보면 네트워크 관련 이슈를 생각보다 많이 접한다. 이동 중 인증되지 않은 인터넷에 자동 연결되서 갑자기 연결이 끊어진다던지.. Api 통신 도중에 갑자기 기지국 범위를 벗어나 끊어진다던지..(몇 초 안걸릴텐데 이게 죽) 이런 종류의 네트워크 이슈를 다루다보니 연결 상태를 체크 해 주는 코드가 필요함을 느꼈고, 해당 기능을 모듈 형식으로 만들어서 사용하기로 했다. 🌐 HttpURLConnection HttpURLConnection? val url = URL("http://example.com") val con = url.openConnection() as HttpURLConnection con.requestMethod = "GET" val responseCode = co..
Ktor text/html content-type 반환으로 인한 문제 해결 Response header `ContentType: text/html; charset=utf-8` Request header `Accept: application/json` 안드로이드에서 Ktor를 사용하다가 보면 마주칠 수 있는 문제다. 보통 원인은 아래의 둘 중 하나이다. 1. Response 타입 불일치 클라이언트가 서버에게 특정 형식의 응답(ex. application/json)을 기대하고 있지만, 서버는 'text/html; charset=utf-8' 형식으로 응답하는 경우 2. Converter의 부재 현재 Ktor Client 설정에 "text/html" 형식의 응답을 처리할 수 있는 컨텐츠 컨버터(Content Converter)가 없는 경우 이 경우, HTML 형식을 처리할 수 없어 N..
[최신 이슈] kotlinx.serialization, plugin is not applied to the module오류 (ft. IDE 1.9.10) 해당 글을 작성하는 시점인 2024.01.04일 기준으로 kotlinx.serialization의 @Serialize 어노테이션을 사용하면 아래와 같은 Warning 문구가 나타난다. kotlinx.serialization compiler plugin is not applied to the module, so this annotation would not be processed. Make sure that you've setup your buildscript correctly and re-import project. 무시하고 빌드하면 아마 아래와 같은 빌드 오류 메시지를 확인 할 수 있을 것이다. IDE: False PLUGIN_IS_NOT_ENABLED in IDE for kotlinx serializ..
ROOM DB 마이그레이션 오류 개선 앱 업데이트를 진행하면 참 기상천외한 버그들을 많이 보는 것 같다. 특히 DB 관련 로직을 수정하면 재현조차 되지 않는 버그들을 흔히 볼 수 있다.. data class에 컬럼을 추가해서 업데이트를 했는데 마이그레이션 코드에서 이미 존재하는 컬럼에 대한 중복 추가 오류로 Fatal Exception: android.database.sqlite.SQLiteException duplicate column name:~~~ 요런게 계속 발생했다. 비록 전체 사용자의 10%도 안되는 장애지만, 일단 장애가 발생하니 묵인할 수는 없다. 아니 근데 없던 걸 추가했는데 중복 이름이 생기다니 게다가 내 테스트 환경에서는 재현조차 안된다니 이걸 어떻게 해결할지 머리 터지게 고민했다 아무 문제없이 업데이트 적용이된 나머지 ..
BuildConfig가 생성 또는 import가 안될 때 브르므글 이거 때문에 서칭하고 어쩌고 하다가 40분 날려먹었다. Ktor 적용을 위해 테스트 삼아 Sample 코드를 작성하는데.. Debug 환경에서 로깅을 하려는데 계속 BuildConfig가 생성도 안되고 Import도 안되었다. import 패키지명.BuildConfig 원래 이렇게 하면 되야하는데 어림도 없지ㅋㅋ 무적의 Clean Project -> Rebuild Project도 어림없도 File -> Invalidate Cache를 해도 안된다. 아래 링크를 참조해서 buildFeatures { buildConfig true } 이렇게 해도 안됨 ㅎ https://stackoverflow.com/questions/20706451/buildconfig-not-getting-created-corr..