colors.xml 에 있는 리소스를 사용하기 위한 code spinnet
fun getColorIntFromResources(context: Context, id: Int): Int? {
try {
if (Build.VERSION.SDK_INT>= 23) {
return context.resources.getColor(id, null)
} else {
return context.resources.getColor(id)
}
} catch (e: Resources.NotFoundException) {
Log.e("KHJI", e.message.toString())
return null
}
}
🙉 해당 code spinnet 에서 try ~ catch 를 사용하는 이유는?
더보기
getColor API
public int getColor(int id, @Nullable Resources.Theme theme) throws Resources.NotFoundException {
throw new RuntimeException("Stub!");
}
첫번째 parameter 로 전달된 리소스 id 존재하지 않을 때, Resources.NotFoundException 오류를 던집니다.
(해당 오류는 런타임 에러라서, 컴파일 시점에 컴파일 오류가 나지 않습니다.) 해당 오류를 잡기 위해서 try~catch 를 써야합니다!
좀 더 Kotlin 답게 변경한 코드는
⬇️⬇️⬇️
fun getColorIntFromResources(context: Context, id: Int): Int? {
return try {
if (Build.VERSION.SDK_INT>= 23) {
context.resources.getColor(id, null) //맨 마지막 라인이 반환 값이 된다.
} else {
context.resources.getColor(id) //맨 마지막 라인이 반환 값이 된다.
}
} catch (e: Resources.NotFoundException) {
Log.e("KHJI", e.message.toString())
null //맨 마지막 라인이 반환 값이 된다.
}
}
반환값으로 try~catch 를 사용할 수 있고, 이 떄, 맨 마지막 라인이 반환값이 된다.
Kotlin 에서는 try~catch 자체도 객체로 취급하는 것 처럼 보인다. 해당 내용이 맞는 지, 좀 더 공부를 해보도록 하겠습니다!
반응형
'Platform > Android' 카테고리의 다른 글
[AndroidStudio] 에뮬레이터 키보드 한글 안됌 (0) | 2022.04.11 |
---|---|
[AndroidStudio][Gradle] Task 안보일 때 (0) | 2022.03.02 |
[EditText] 문자열 변경을 감지하고 싶을 때? addTextChangedListener (0) | 2022.02.28 |
[Error] This version of the Android Support plugin for IntelliJ IDEA (or Android Studio) cannot open this project, ... (0) | 2022.02.24 |
[AndroidStudio] 안드로이드 스튜디오 베타 Release, 개발 Release, 안정화 Release 등 버전 확인 && 업데이트 (0) | 2022.02.23 |