Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 1차원 DP
- 2차원 dp
- 99클럽
- @BeforeAll
- @BeforeEach
- @Builder
- @Entity
- @GeneratedValue
- @GenericGenerator
- @NoargsConstructor
- @Query
- @Table
- @Transactional
- Actions
- Amazon EFS
- amazon fsx
- Android Studio
- ANSI SQL
- ApplicationEvent
- assertThat
- async/await
- AVG
- AWS
- Azure
- bind
- builder
- button
- c++
- c++ builder
- c03
Archives
- Today
- Total
기록
AndroidStudio/kotlin/Custom Exception 본문
개요
firebase를 통한 로그인 서비스를 구현하던 중에 uid 값이 들어오지 않는 문제가 발생했다.
우선, uid값에 null 값이 들어오면 테스트 계정의 uid를 연결하도록 코드를 작성했다.
class ReadUserRequest : BaseRequest() {
override val TAG = "ReadUserRequest"
private val DATA_PATH = "Users"
override fun request() {
val uid = AppApplication().getUid()
FirebaseDatabase.getInstance()
.reference
.child(DATA_PATH)
.child(uid!!)
.get()
.addOnSuccessListener {
val result = it.getValue(UserResponse::class.java)
mlistener?.onRequestSuccess(result as Object)
}
.addOnFailureListener {
mlistener?.onRequestFail()
Log.e(TAG, it.toString())
}
}
}
// AppApplication
fun getUid() : String {
var uid = FirebaseAuth.getInstance().currentUser?.uid
if(uid == null) {
uid = "...."
}
return uid!!
}
이렇게 처리한 경우, uid가 없다는 사실을 어떻게 알릴 수 있을까를 고민하다가, custom Exception을 사용했다.
예제
// AppApplication
fun getUid() : String{
if (uid!=null) return uid!!
var uid = FirebaseAuth.getInstance().currentUser?.uid
try {
if(uid == null) {
// 우선 throw error 던지도록 처리
throw CanNotFindUidError()
}
} catch (e : CanNotFindUidError){
/**
* 지금 uid 값이 안들어옴 나중에 여기 처리해야 함
*/
uid = "M8mYC1eUs6RqEUrxTj7mARW3dK72"
Log.e(TAG, e.stackTraceToString())
}
return uid!!
}
// CanNotFindUidError
class CanNotFindUidError : Exception() {
override val message: String?
get() = "firebase uid를 찾을 수 없습니다."
}
Exception
예외 처리 목적
이러한 예외를 활용하여 개발자와 사용자에게 오류발생을 알릴 수 있다. 예를 들어 유효하지 않은 경로로 진입한 경우, 사용자에게 다이얼 로그를 띄운다던가, 다음에 실행되어야 할 행동을 정의할 수 있다.
Java Exceptions Hierarchy
위 예제에서는 Exception을 사용했지만, RuntimeException을 사용할 수도 있다.
Checked Exception (Exception) |
Unchecked Exception (RuntimeException) |
|
처리여부 | 반드시 예외 처리를 해야 함 | 명시적 처리를 강제하지 않음 |
확인시점 | 컴파일 단계 | 실행 단계 |
예외처리방법
복구 | 예외 발생 시 직접 처리함 |
회피 | 예외를 직접 처리하지 않고 호출한 곳에서 처리하도록 함 |
전환 | 적절한 예외로 변경하여 발생한 예외를 직접 처리하지 않고 호출한 곳에서 처리하도록 함 |
'Moblie > Android' 카테고리의 다른 글
[issue] 공공데이터 api connectError (0) | 2022.07.18 |
---|---|
AndroidStudio/XML의 글꼴 적용하기 (0) | 2022.07.12 |
AndroidStudio/kotlin/callback 패턴의 적용 (0) | 2022.06.21 |
androidStudio/ProgressBar Style Custom (0) | 2022.06.19 |
AndroidStudio/나인 패치(9-Path) 이미지 (0) | 2022.06.17 |
Comments