no image
kotlin LiveData StateFlow SharedFlow 개념정리.araboza
0. 서론 ㅎㅇ 돈받고 하는 개발일에 바쁘다보니 ( 회사일)한달에 한개정도의 개발 글만 쓰자고 노력해도 잘 안지켜짐 ㅋㅋ 아무튼 오늘은 작업하다가 자주 느끼는 관찰 observe에 대해서 볼까 함 1. 본론(1) mutable이 뭐냐 보니까 listOfmutableListOfliveDatamutableLiveDatastateFlowmutableStateFlow 이렇게 비슷한 용도인 것 같아요 mutable이 뭐냐? 내부의 값을 바꾸거나 변경할 수 있는 형태라고 보면 될 듯 합니다.값 변경이 가능한 list~ liveData stateFlow 아무튼 여기서 예를 들어 먼저 한 개의 스위치가 켜져있을 때 꺼져있을 때 상태를 관찰하는 변수가 있다고 함class MainViewModel : ViewModel(..
2025.07.30
no image
kotlin 안드로이드 File 손상된 파일 다운로드 받기
안녕하세요 오늘은 0. 서론파일이 손상됐을 때 다시 다운로드 받기 (File 데이터 클래스로) 임 일단 URL에서 파일을 다운로드 받는 로직에서 갑자기 BAD_DECRYPT 이런 오류가 나옴..근데 솔직히 내가 비밀키를 뭐 바꾼것도아니고, 암호화-복호화, 해싱에 대해서 손댄것도 아니라서 킹리적 갓심으로 -> '파일 다운로드 받을 때 손상됐다.'라는 생각이 듦. GPT나 클라우드도 복호화가 안되는 것 파일이 손상됐거나, 읽어들일 수 없는 파일이 가장 큰 이유라는 설명. 1. 본론 일단 복호화할 때 이를 cache로 저장하는데val tempFile = File.createTempFile("temp_", null, context.cacheDir) connection.inputStream.use { inp..
2025.01.29
no image
kotlin 화면전환시 캐시파일 사라짐 (cache에 넣은 .tmp 자동삭제 )
오늘은 개발 과정 중에 File형식의 데이터들이 어느 순간 사라져버리는 상황에 대해 기록해놓으려고 합니다. 1. 상황 보안을 위해 사용자 개인의 파일을 File형식의 데이터로 복호화해서 data class로 담아 사용하던 중, 갑자기 이런 로그가 나오면서 앱이 Crash되는 상황Load failed for [/data/user/0/com.example.exampleProject/cache/decrypted_8586103720381587663.tmp] with dimensions [195x195] class com.bumptech.glide.load.engine.GlideException: Failed to load resource There were 3 root causes: java.io.FileNo..
2025.01.27
no image
Kotlin 디버깅 시간 not attached to a context
오늘의 디버깅 시간~ 디버깅 기초중에 기초라고 할 수 있는? 주제임 바로 Context에서 생기는 오류로 실제로 디버깅 모드에서 avd로 개발 중이거나 할 때는 발견할 일도 많이 없지만, 실제 기기에서 화면 전환이 무자비하게 이뤄지거나, 아니면 쉘몽키 같은걸로 앱을 두들길 때 발견할 수 있음 ㅋㅋhttps://developer.android.com/reference/android/content/Context Context  |  Android Developers developer.android.com not attached to a context. 라고 로그에 나오는데 공홈에서는 애플리케이션 환경에 대한 글로벌 정보에 대한 인터페이스입니다. 이것은 안드로이드 시스템에서 구현을 제공하는 추상 클래스입니다...
2024.11.21
no image
Android / PlayConsole 플레이 스토어 앱게시 하기 (안드로이드 품앗이)
안녕하세요.. 드디어 근 몇주간의 길고긴 야근이 끝났는데요. 짬짬히 들락날락하며 지난 6월 앱을 만든 이후부터 4개월간의 "플레이스토어에 내가 만든 앱 게시하기" 사건을 회고하는 일정진짜 앱이 정지당했을 때의 화남은 잊을 수가 없음 암튼   0. 서론 (안 읽어도 됨)저는 고등학생 급식 때부터 지금까지 버스를 빠짐없이 타고 있는데요. 아이폰에는 든든한 버스어플이 있지만, 간혹 안드로이드로 기변했을 때, 광주 버스어플에서 시장의 일타 어플이 제가 사용하기에는 불편. 그래서 내가 만들어보면 어떨까 ? 첫 앱이니까 부담없이 가볼까 해서 만든 어플.https://play.google.com/store/apps/details?id=com.sardinespicysalad.gwangjubus&pcampaignid=w..
2024.10.12
no image
kotlin 안드로이드 바차트 MPAndroidchart BarChart Round Shape
안녕하세요 오늘 적어볼 건안드로이드에서 다뤄야할때 무조건 접할 수밖에 없는 MPAndroidChart인데요꺾은선 그래프, 막대 그래프 등https://github.com/PhilJay/MPAndroidChartline chart, bar chart  앱에 넣어야한다? 그럼 무조건 MPAndroidChart 를 사용할 수 밖에 없는 상황이거든요.이걸 일일이 만든다고 상상하면 노가다 ㅋㅋ 티스푼으로 국밥먹는 느낌... 아무튼?사실 바차트나 라인차트나 다 비슷해요 원리를 피그잼으로 직접 그려본다면 차트에 들어갈 값들을 List로 바꾸고 -> 이 엔트리는 RaderChart, LineChart, BarChart 등 다 다름. 맞게 넣으면 됨.그리고 차트 속성, XAxis, YAxis 등 여러 속성들을 입맛대로 ..
2024.10.12
no image
kotlin elevation이 -1인 토글그룹버튼 만들기 ( UI / UX 개선 )
ㅋㅋ오늘은 토글 버튼 그룹을 적어보려고 합니다그냥 평면적으로 있는 토글그룹은 아니구요  중복선택이 아니라, 마치 스위치 형식으로 하나만 선택되는 형식으로요.근데? 인디케이터가 버튼위에서 동작하는 느낌인거죠. (대신 버튼은 Text는 보임)누르면 애니메이션으로 인디케이터가 누른걸로 선택되는 겁니다. 근데 인디케이터가 버튼 위에있어요. 왔다 갔다 좌우로 움직이는 인디케이터를 화면 전체로 움직이는 거죠  암튼 한 마디로 말해서 TabLayout, Switch 형식이 결합된. 버튼 딸깍딸깍 (??) 암튼 시작. 먼저 찾아보니까 ButtonToggleGroup이라는 view가 있더라구요. 그 안에 버튼2개를 넣어줬습니다. 0. 사전 참고 알아야할 사실 개발환경 : Android33, MateralDesign 의..
2024.09.15
no image
kotlin Adapter 사용하기
어댑터... 나는 어댑터가 싫지만, Kotlin하는 사람으로 이 어댑터를 뺄래야 뺄 수가 없다.. 작업하면서 신기방기 도라방스 한 기능을 실제로 만들어봤을 때 그 뿌듯함은 참 보람찬데 하기싫은것 ^^ 지금까지 Spinner, RecyclerView, ViewPager2 이렇게 어댑터를 사용해봤는데얼추 장맛은 본 것 같으니, 제대로 댕장꿍 한 번 거하게 끓여서 공부해야 할 것 같은 것 아무튼 지금까지 이 어댑터를 이해한 부분을 전부 적어보겠숨..먼저 Adapter가 어느 포지션인지 ?  쉽게 말해서 layout을 짜다가 저런 view(안이 텅텅 비어있는 것들)안에 채워야할 때! 내가 만든 layout을 adapter를 통해서 공장 돌려서 원하는 수만큼 만들어서 화면에 보이게 한다는 거죠.. 1. 사실 뷰페..
2024.08.05
no image
kotlin 자동 타이머 Runnable로 구현하기
https://developer.android.com/reference/kotlin/android/os/Handler?_gl=1*11cwltx*_up*MQ..*_ga*OTI1ODMzOTE5LjE3MTY2MTE1MDY.*_ga_6HH9YJMN9M*MTcxNjYxMTUwNS4xLjAuMTcxNjYxMTUwNS4wLjAuMA.. Handler  |  Android Developers developer.android.com현재는 기본 api로 변경된 Splash를 만들던 때, " 3초 뒤에 MainActivity로 이동할게요 ! " 하는 과정에서 '3초 지연' 뭐 이런 구글링으로 찾아서 대부분 아는 Handler(Looper.geMainLooper()).postDelayed({}, [시간]) 이다. 아 그냥 이..
2024.05.25