서버통신 : ViewModel

Yuree Choi·2022년 7월 6일
0

서버통신 : ViewModel

아무래도 앱잼하면서 얻은 지식은 디투 색으로 제목 바꿔줘야지 ㅋㅋ
근데 이제 블로그 쓸 시간 없겠지..

1. Livedata에서의 get()

  • 라이브데이터의 get이 어디서 나온건가요? 그냥 엑세스해줄 수 있게 하는 건가요?
private var _isSuccess = SingleLiveEvent<Boolean>()
val isSuccess: LiveData<Boolean> get() = _isSuccess

보면 하나는 private, 하나는 public이다.
get()을 만약에 안쓰면 걍 isSuccess에 _isSuccess가 할당되는거니까 초기화된 값만 가져오는거다.
get()을 쓰면 최근 _isSuccess 값을 가져올 수 있다

val로 해야되는건 값을 가져올 수는 있지만 바꾸지는 못하게 하려고!


2. SingleLiveEvent

  • SingleLiveEvent를 사용했는데 혹시 설명 가능할까요?

: 불필요한 알림이 가지 않도록 이벤트 발생하기만 했다 알려주는거.

더 찾아보니 뷰의 재활성화가 되면서, Livadata가 Observer 호출해가지고 불필요한 Observer 이벤트가 일어나는걸 막아주는거래, MutableData 상속받는거라 값 변경도 된대


3. 서버통신 시 제발 까먹지 말아야 할 것

3-1. 서버통신할때 manifest에서 인터넷 허용 해주라 !!!!

<uses-permission android:name="android.permission.INTERNET"/>

+근데 여기서 보안 상 문제 떔에 http랑 https 막아놓은거 풀기위해 application 안에 한줄 더써야돼

<application
  ...
	android:usesCleartextTraffic="true"
  ...
  />

4. 그 밖 오류 해결 내용

  • SignInViewModel에서 왜 앱이 강종됐냐~ 하면. 사실 문제는 3번에서 해결하긴 했지만ㅋ
    로그캣보면 when ((exception as HttpException).code()) 여기서 문제가 일어난건데
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()
   }
}

4-1. runCatching

보면 postLogin의 result는 SignInResponse다. 얘는 이제 성공하거나 실패하겠지?
여기서 onSuccess나 onFailure 얘네는 확장함수란 말이다! 그래서 보면 얘네 Result 값이 있음.
그래서 예외처리로 runCatching을 이용해 한번 감싸주는 것이라고 한다..!

4-2. as

  • As 는 타입을 바꿔주는거! exception이 HttpException라는 타입이다~하고 바꿔주는거임.
  • 샘해밍턴 as 호주인. 이라고 타입을 바꿔놓는 거라고 예시를 들어주신 미스터한 감사합니다 ㅋㅋ

근데 httpException이 아니면 앱이 터지는거임~ 머 알고보니 샘해밍턴이 호주인이 아니었다? 이런느낌인거지..

그래서 as 뒤에 ? 붙여서 안전성 보장해줄 수도 있고 그렇습니다!

처음에 내가 android:usesCleartextTraffic="true" 얘를 적용을 안해줘서 아무래도 얘가 httpException이 아닌걸로 되었을테니 앱이 터지는 문제가 생겼던 것!

profile
마음만은 잔디밭

1개의 댓글

comment-user-thumbnail
2024년 3월 29일

ㅋㅋ 샘해밍턴 as 호주인 내가 저랬다고 ? 기억 안 나

답글 달기