아무래도 앱잼하면서 얻은 지식은 디투 색으로 제목 바꿔줘야지 ㅋㅋ
근데 이제 블로그 쓸 시간 없겠지..
private var _isSuccess = SingleLiveEvent<Boolean>()
val isSuccess: LiveData<Boolean> get() = _isSuccess
보면 하나는 private, 하나는 public이다.
get()을 만약에 안쓰면 걍 isSuccess에 _isSuccess가 할당되는거니까 초기화된 값만 가져오는거다.
get()을 쓰면 최근 _isSuccess 값을 가져올 수 있다
val로 해야되는건 값을 가져올 수는 있지만 바꾸지는 못하게 하려고!
: 불필요한 알림이 가지 않도록 이벤트 발생하기만 했다 알려주는거.
더 찾아보니 뷰의 재활성화가 되면서, Livadata가 Observer 호출해가지고 불필요한 Observer 이벤트가 일어나는걸 막아주는거래, MutableData 상속받는거라 값 변경도 된대
<uses-permission android:name="android.permission.INTERNET"/>
+근데 여기서 보안 상 문제 떔에 http랑 https 막아놓은거 풀기위해 application 안에 한줄 더써야돼
<application
...
android:usesCleartextTraffic="true"
...
/>
viewModelScope.launch{
kotlin.runCatching{
signInService.postLogin(SignInRequest(email, password))
} //ServiceCreator 불러와라
.onSuccess{
_isSuccess.value= true
}
.onFailure{exception->
when ((exception as HttpException).code()) {
//as는 타입을 바꿔주는거. exception이 HttpException이 아니면 앱 터짐!
404 -> _isEmailIncorrect.call()
409 -> _isPasswordIncorrect.call()
else -> _isSuccess.value= false
}
}
}
} else {
_isEmpty.call()
}
}
보면 postLogin
의 result는 SignInResponse
다. 얘는 이제 성공하거나 실패하겠지?
여기서 onSuccess나 onFailure 얘네는 확장함수란 말이다! 그래서 보면 얘네 Result 값이 있음.
그래서 예외처리로 runCatching을 이용해 한번 감싸주는 것이라고 한다..!
근데 httpException이 아니면 앱이 터지는거임~ 머 알고보니 샘해밍턴이 호주인이 아니었다? 이런느낌인거지..
그래서 as 뒤에 ? 붙여서 안전성 보장해줄 수도 있고 그렇습니다!
처음에 내가 android:usesCleartextTraffic="true"
얘를 적용을 안해줘서 아무래도 얘가 httpException이 아닌걸로 되었을테니 앱이 터지는 문제가 생겼던 것!
ㅋㅋ 샘해밍턴 as 호주인 내가 저랬다고 ? 기억 안 나