본문 바로가기

반응형

전체 글

(54)
[Android + Kotlin] startActivityForResult 의 Deprecated 를 해결하자. startActivityForResult 가 Deprecated 가 되었고, callback 형태로 변경이 되었습니다. 기존에 onAcitivityResult() 함수가 Activity 안에서만 선언이 가능하여 Fragment 나 adapter의 item 등에서 사용하기가 어려웠고, 코드도 복잡했습니다. 이런 점에서 callback 으로 사용한다는 점에서는 크게 환영할 일입니다. 이제 어떻게 사용을 하는지 알아보겠습니다. 1. onActivityResult() 를 callback 으로 변경 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, res..
[Android + Kotlin] LifecycleEventObserver, DefaultLifecycleObserver 를 사용해보자. 진행중인 프로젝트에서 웹뷰를 앱이 백그라운드로 내려간 후, 임의의 시간이 지나, 다시 포그라운드로 올라올때 웹뷰를 갱신해 달라는 요청이 있었습니다. 우선 앱이 백그라운드 포그라운드 시에 대한 이벤트를 받아야겠죠. 이를 위해 LifecycleEventObserver를 사용합니다. class AppMain: Application(), LifecycleEventObserver { override fun onCreate() { super.onCreate() ... ProcessLifecycleOwner.get().lifecycle.addObserver(this) } override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) { when..
[Android + Kotlin] sortedWith() 로 멀티 조건 정렬을 해보자. 최근에 현업 프로젝트에서 정렬을 하는 기능이 있어서, 구현 내용을 공유하고자 합니다. 서버에서 전체 목록을 받은 후, 이를 점수로 정렬한 후에, 같은 점수 내에서 이름순으로 정렬하는 기능입니다. 샘플 프로젝트로 재구성 해보았습니다. 1. 샘플 데이터 만들기 UserScore 라는 데이터 클래스를 만들고 이름과 점수를 입력 받습니다. 일반적인 서비스라면 서버에서 데이터를 받아야 하겠지만, 샘플 프로젝트이니, 더미 데이터를 전달할수 있는 fetchList() 함수를 만들었습니다. data class UserScore (val name: String, val score: Int) { companion object { fun fetchList(): List { return listOf( UserScore("아이..
[Android + Kotlin] 날짜/시간 <-> currentTimeMillis 변환 및 format 표시 기존에 날짜/시간을 변환하고 표시하기 위해, calendar, Date, SimpleDateFormat 등을 사용했습니다. 그런데, 그동안 위의 클래스에 불편함이 문제가 좀 많이 있었습니다. (문제점은 옆에 링크 확인 : https://d2.naver.com/helloworld/645609) 이를 개선하고자 Java8 에 적용된 것이 LocalDate, LocalDateTime입니다. 어떻게 사용하면 되는지 쉽게 빠르게 알아보겠습니다. * LocalDate, LocalDateTime 클래스는 Android 버전 코드 오레오(Build.VERSION_CODES.O) / API level 26 이상부터 지원이 됩니다. 당연히 우리의 어플은 minSdk가 26 미만일 것입니다. 그래서, 하위 버전에서도 위의 ..
[Android Kotlin] Webview 디렉토리 충돌 관련 수정 방법 (https://crbug.com/558377) 얼마전에 크래시틱스 아래와 같은 로그가 올라왔습니다. Using WebView from more than one process at once with the same data directory is not supported. https://crbug.com/558377 : Current process 로그 내용을 보자면... "Webview에서 다른 프로세스가 동일한 데이터 디렉토리에 접근하는 것을 지원하지 않는다." 뭐.. 이런 내용인 것 같습니다. 그 뒤로, https://crbug.com/558377 URL이 보여 웹브라우저에서 링크를 열어보았더니, 크롬 버그 사이트로 연결이 되어, 해당 이슈 관련한 보고나 댓글 등을 볼수가 있었습니다. 나외에도 다른 사람들도 이 버그로 고통받고 있구나라는 생각이 ..
[Android Kotlin] sealed class로 Network Response (with Flow)를 구현해보자. 이번 시간엔 sealed class를 이용하여 서버에서 수신한 응답을 viewmodel로 전달하는 것을 구현하려고 합니다. 기존에 개발했던 아래 링크의 게시물 코드를 수정합니다. Koin + MVVM + Coroutine + Flow 를 이용한 상세화면 만들기 앱개발에서 가장 기본이라 할수 있는 Rest API로 서버에서 데이터를 요청하고, 화면에 표시하는 일련의 과정을 정리해보려고 합니다. 요즘 Android 개발을 하면서 가장 많이 사용하고 있는(실제로도 heeeju4lov.tistory.com 위의 게시물에서는 Repository에서 exception 처리로 성공/실패을 응답했다면, 이번 시간엔 sealed class를 이용하여 성공/실패를 viewmodel로 전송하는 것을 구현하겠습니다. 그럼, ..
adb: more than one device/emulator 문제 해결하기 앱에 애널리틱스 로그를 추가하고 실제로 잘 전송이되는지 Firebase의 DebugView로 확인을 하려고 하였습니다. 안드로이드 스튜디오의 터미널에서 debugView모드로 변경해주는 커맨드를 실행하였습니다. 그런데, 위와 같이 adb:more than one device/emulator 라는 메시지가 나오고 실행이 되지 않았습니다. 디버그 모드로 변환을 할 디바이스가 1개 이상을 발견해서 나오는 메시지였습니다. 그렇다면, 디버그 모드로 할 디바이스를 선택 후에 커맨드를 실행해주면 되는 것입니다. 우선, adb devices 를 실행하여 발견한 디바이스가 몇개인지 확인해 봅니다. 역시나 2개가 표시되네요. 저는 실제 단말에서 테스트를 진행할 것이기 때문에 R3CNA014JSV를 선택합니다. adb -s..
[Git] master 브랜치에 다른 브랜치 push(덮어쓰기) 하기 얼마전 개발 진행중인 프로젝트에 참여하게 되었습니다. git에서 소스코드를 검토하는데, master 브랜치가 보이지가 않습니다. (저는 git tool로 GitKraken(깃크라켄) 사용합니다.) 스크롤 몇번 내리면 나올 줄 알았는데.... 보이지가 않네요. 화면 오른쪽에 리모트 브랜치 목록에서 master 브랜치를 찾아서 클릭해보니... 6개월전에 master 브랜치가 머물러 있었습니다. 음.... 잠깐의 고민 후에.. 히스토리는 포기하고 master 브랜치에 최신 릴리즈 브랜치를 머지하기로 결정하였습니다. 머지는 간단하니까.. 클릭 몇번으로 릴리즈 브랜치를 머지를 했습니다. 그런데...., 테스트 빌드를 해보니.. 실패가 됩니다. 으잉?! 확인해보니.. 중간중간 revert한것들과.. 몇번의 꼬임들...

반응형