전체 글 332

Manifest merger failed - tools:replace

안드로이드 스튜디오 빌드 시 다음과 같은 에러 발생.Manifest merger failed : Attribute property#android.adservices.AD_SERVICES_CONFIG@resource value=(@xml/gma_ad_services_config) from [com.google.android.gms:play-services-ads-lite:23.0.0] AndroidManifest.xml:92:13-59 is also present at [com.google.android.gms:play-services-measurement-api:21.6.2] AndroidManifest.xml:32:13-58 value=(@xml/ga_ad_services_config). 친절하..

Group(selectedGroupId = null Vs -1)

selectedGroupId 변수는 현재 선택된 그룹을 나타내는데 사용됩니다. 이 변수의 값이 null인 경우 선택된 그룹이 없음을 나타내는 것이 일반적입니다.-1을 사용하는 것은 특정한 상황에서 유효한 그룹 ID가 없음을 나타내는 방법일 수 있지만, 이는 코드를 읽는 사람에게 혼란을 줄 수 있습니다.   따라서, null을 사용하여 "선택된 그룹이 없음"을 나타내는 것이 더 명확하고 일반적인 방법입니다. 이렇게 하면 selectedGroupId 변수의 타입을 nullable Group?으로 선언할 수 있으며, 이 변수가 null인지 아닌지를 확인함으로써 선택된 그룹의 존재 여부를 쉽게 판단할 수 있습니다.

Kotlin by VS .value collectAsStateWithLifecycle

val groupsUiState by viewModel.groupsUiState.collectAsStateWithLifecycle() val groupsUiState = viewModel.groupsUiState.collectAsStateWithLifecycle().value 두 코드는 Kotlin의 by 키워드를 사용하는 방식과 직접 .value를 호출하는 방식의 차이를 보여줍니다.   val groupsUiState by viewModel.groupsUiState.collectAsStateWithLifecycle() 이 코드는 Kotlin의 위임 프로퍼티(delegated property)를 사용합니다. by 키워드를 사용하면 groupsUiState의 값은 viewModel.groupsUiState..

MutableStateFlow .update VS .value = 차이점

private val _uiState = MutableStateFlow(UiState.Loading)_uiState.update { when (state) {VS_uiState.value = state 두 방법 모두 MutableStateFlow의 값을 업데이트하는 방법이지만, 사용 상황에 따라 적합한 방법이 다르다._uiState.update { }: 이 방법은 현재 MutableStateFlow의 값에 기반하여 새 값을 계산할 때 유용하다. 이 함수는 현재 값을 인자로 받는 람다 함수를 사용하며, 람다 함수의 반환 값이 새로운 값으로 설정됨.  _uiState.value = state: 이 방법은 새 값이 현재 값에 의존하지 않을 때 사용한다. 이 방법은 단순히 MutableStateFlow의 ..

listOf()와 emptyList() 차이

listOf()와 emptyList() 모두 코틀린에서 빈 리스트를 생성하는 함수. listOf()는 가변 인자를 받아서 리스트를 생성하는 함수다. 인자 없이 호출하면 빈 리스트를 반환한다.  emptyList()는 항상 빈 리스트를 생성하는 함수로 listOf()와 emptyList()는 인자 없이 호출할 경우 동일한 결과, 즉 빈 리스트를 반환함. 그러나 이 두 함수 사이에는 성능 차이가 있다. emptyList()는 항상 같은 인스턴스를 반환하기 때문에 새로운 객체를 생성하지 않음. 반면에 listOf()는 호출할 때마다 새로운 리스트를 생성함.  따라서 빈 리스트를 생성할 때는 emptyList()를 사용하는 것이 더 효율적.

Missing type, Progard, Generic 문제

java.lang.RuntimeException: Missing type parameter. at cohttp://m.google.gson.reflect.TypeToken.getSuperclassTypeParameter(Unknown Source:26) at cohttp://m.google.gson.reflect.TypeToken.(SourceFile:1) at U2.e$a.(SourceFile:1) at U2.e.a(SourceFile:8) 1. 위와 같은 문제 발생시 위치를 알기 어렵다. --> Release, Debug 모두 확인 시 Release 에서만 발생 확인 2. Release 에서만 발생 --> 의심; minify, progard --> 소스를 제대로 읽지 못해 발생 할 수 있으므로 2. ..

티스토리 코드블럭 가로스크롤 만들기

티스토리 코드 블럭을 적용하면 가로 스크롤이 기본으로 적용되지 않아서 아래와 같이 간단하게 적용해야만 한다. 그렇지 않으면 가독성이 좋지 않다. 1. 관리자 모드에서 좌측 스킨 편집으로 진입 한뒤 2. 아래 그림에 보이는 html 편집을 선택 3. CSS 편집 CSS 편집을 눌러준 뒤 4. 가로 스크롤 코드 넣기 아래로 쭈욱 길게 CSS 파일이 나오는데 아래로 스크롤해서 맨 마지막에 아래 코드를 붙여 넣으면 끝. .hljs { white-space: pre; overflow-x: auto; } 5. 아래 코드를 보면 스크롤 바가 생긴 것을 확인할 수 있다. class Activity : AppCompatActivity() { @SuppressLint("ClickableViewAccessibility") ..

Caused by: java.lang.IllegalArgumentException: MaterialThemeUsingMdcTheme requires the host context's theme to extend Theme.MaterialComponents

Caused by: java.lang.IllegalArgumentException: MaterialThemeUsingMdcTheme requires the host context's theme to extend Theme.MaterialComponents at com.google.android.material.composethemeadapter.MdcTheme.createMdcTheme(MdcTheme.kt:134) at com.google.android.material.composethemeadapter.MdcTheme.createMdcTheme$default(MdcTheme.kt:125) at com.google.android.material.composethemeadapter.MdcTheme.Mdc..

반응형