Android

    [Android] SingleLiveEvent의 원리

    SingleLiveEvent를 사용하는 이유를 설명할 수 있어야 한다. LiveData를 이용하다보면, View의 재활성화 (start나 resume 상태로 재진입)가 되면서 LiveData가 observe를 호출하여, 불필요한 Observer Event까지 일어나는 경우가 있습니다. 이를 방지하기 위해 기존 LiveData를 상속하여 만들어낸 것이 SingleLiveEvent입니다. (SingleLiveEvent에 대해 상세히 알고싶다면 - 링크) 일반적인 SingleLiveEvent 코드는 다음과 같습니다. import android.util.Log import androidx.annotation.MainThread import androidx.lifecycle.LifecycleOwner import..

    [Android] Activity 좌우로 전환 애니메이션 적용하기

    📌 Activity 좌우로 전환 애니메이션 적용하기 안드로이드는 위 아래로 전환되는 애니메이션을 기본적으로 적용하고 있습니다. 이를 좌우로 전환시키도록 바꾸고 싶을 때, 아래와 같은 설정을 해주시면 됩니다. // in Activity override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) with(window) { enterTransition = Slide().also { it.excludeTarget(android.R.id.statusBarBackground, true) it.excludeTarget(android.R.id.navigationBarBackground, true) it.slideEdge ..

    [Kotlin] Coroutine 연습 문제

    Coroutine을 공부하면서, 문서를 꼼꼼히 읽어봐도 실전에서는 분명 헷갈리는 부분이 적지 않았다. 그래서 다시 Unit Test를 통하여 연습하던 중에, 이를 문제 - 정답 형식의 문서로 작성해두면 좋을 것 같아 남기게 되었다. 🤔 Coroutine 연습문제 Unit Test 내에서의 결과이기 때문에 상대적으로 긴 런타임을 가지는 실제 상황과는 다른 결과가 나타날 수 있습니다. 그러나 오히려 그렇기에 공부하기에는 더 확실한 방법이므로, 출력의 보장 결과 여부는 Unit Test Runtime 기준으로 합니다. 🕐 문제 1. 출력 결과를 예상하시오. class ExampleUnitTest { @Test fun assert_test() { runBlocking { println("start") /** A..

    [Android/문제 해결] java.lang.illegalArgumentException: Unexpected char 0xxxxx at Number in ~ Error

    📌 illegalArgumentException: Unexpected char 에러에 대한 처리 나의 경우 안드로이드에서 Multipart Upload를 시행 중 위의 에러를 겪었는데, 결과적으로는 이런 에러가 떠주어서 정말 고맙다는 생각까지 하게 되었다. 만약 이런 에러가 뜨지 않았다면, 비정상적인 결과를 보고 대체 어디서 에러가 난것인지 찾느라 몇 달을 밤새야 했을 것이니.. 심지어 업로드하는 대상에 따라서 간헐적으로 뜨는 에러이기도 했다. 에러 문구 그대로, 정상적인 작업(여기서는 업로드)을 진행 불가능하게 만드는 어떤 텍스트가 존재한다고 알려주는 것이다. 단순 텍스트로는 보이지 않아도 업로드를 위해 인코딩되거나 할 때, 개행 문자로 바뀌거나 다른 의미있는 문자로 바뀌게 되어 원치않은 데이터가 보내..

    [Android/문제 해결] java.lang.IllegalArgumentException: You must call this method on the main thread In Kotlin

    📌 Glide works with background thread Glide에서 BItmap을 얻고자 하는 등의 행위를 할 때, background thread 내에서 작업하라는 에러 문구가 등장합니다. 이는 사실 공식 문서에서 가이드를 제공 중입니다. Ref) 아래는 kotlin 내에서 이를 구현했을 때의 모습입니다 Glide.with(context) .asBitmap() .load(url) .into(object: CustomTarget() { override fun onLoadCleared(placeholder: Drawable?) { // 아래 resource가 들어간 뷰가 사라지는 등의 경우의 처리 } override fun onResourceReady(resource: Bitmap, trans..

    [안드로이드/font] 폰트 추천 3. Spoqa Han Sans

    https://github.com/spoqa/spoqa-han-sans spoqa/spoqa-han-sans Spoqa Han Sans. Contribute to spoqa/spoqa-han-sans development by creating an account on GitHub. github.com 0. 한장 소개 토스 등 여러 앱에서 사용 중인 Spoqa Han Sans 글꼴이다. 개인적으로는 noto sans랑 비교해보았을 때 전체적으로 비슷한 느낌? 이랄까, 영문 한문 숫자 모두 무난무난한 느낌이다. 어플리케이션에 사용 시 Default 폰트로 사용하기에 괜찮다고 생각될 정도로 잘 만들었다 생각하는 폰트.

    [Django] upload multiple image file in one model

    한 모델에 여러 이미지 파일을 업로드 해야 할 때 Meet 이라는 모델이 있고, 그 모델 하나에 여러 이미지 파일이 들어갈 수 있는 상황이라고 했을 때, 어떻게 구현해야 할까? 쉽게 생각하자면, 댓글과 다를 것이 없다. 댓글 또한 one to many 모델이기 때문이다. 단지 댓글은 텍스트 데이터를 가지고 있는 것이고, 이미지 파일은 이미지 데이터를 가지고 있는 차이가 있을 뿐이다. 따라서 같은 방식으로 구현을 해주면 된다. 모델의 객체값을 ForeignKey로 가지고 있는 Images 라는 모델을 만들었다. #models.py class Meet(models.Model): pair = models.ForeignKey(Pair, blank=False, null=False, on_delete=models...

    [안드로이드/font] 폰트 추천 2. Praktika

    https://www.dafont.com/praktika.font Praktika Font | dafont.com Note of the author Praktika Light is a sample of the complete 40 font grotesk family with widths from condensed to extended. www.dafont.com 유료 폰트 (Light 버전은 무료) 0. 한장 소개 어느 앱을 까다가 발견한 폰트인데, 숫자와 영어만 적용 가능한 폰트이다. 숫자가 매우 digitalic하게 보이고, 영어 또한 숫자와 어울려서 매우 맘에 들어서 알아보았더니 유료 폰트..ㅠ 그래서 비슷한 걸 알아보고 있다.