세미나에서 배웠듯이 로그인, 회원가입 서버 통신을 구현하기 위해
- 라이브러리 추가 및 AndroidManifest 설정
- 서버 Request / Response 객체 설계
- Retrofit Interface 설계
- Retrofit Interface 실제 구현체(객체) 만들기
- Callback 등록하여 통신 요청
의 단계를 거쳐서 해주었다.
<br
우선, 회원가입 메서드와 로그인 메서드 모두 구현하기 위해 필요한 Retrofit interface와 Retrofit 객체를 구현해주었고 ,각 메서드의 request body, response body에 해당하는 data Class를 정의해주었다.
SignUpActivity.kt
에 네트워크를 초기화하는 메서드 initNetwork()
를 정의해주었고 , 여기에 콜백을 등록해서 data를 서버에서 비동기적으로 받아오도록 구현했고 그 data의 응답에 따라 다른 기능을 하도록 구현해주었다.
그리고 이 initNetwork()
메서드를 binding.btnSignUp.setOnClickListener
에 넣어줌으로써 각 회원가입 버튼을 눌렀을 때, 서버 통신이 이루어지게 해주었다.
private fun initNetwork(){ // 네트워크를 초기화하는 함수
val requestSignUpData = RequestSignUpData(
name = binding.etName.text.toString(),
email = binding.etId.text.toString(),
password = binding.etPwd.text.toString()
)
// signUp에 대한 call 객체 선언
val callSignUp: Call<ResponseSignUpData> = ServiceCreator.basicService.postSignUp(requestSignUpData)
callSignUp.enqueue(object : Callback<ResponseSignUpData> {
override fun onResponse(
call: Call<ResponseSignUpData>,
response: Response<ResponseSignUpData>
) {
if(response.isSuccessful){
val data = response.body()?.data
Toast.makeText(this@SignUpActivity, "${data?.name}님 회원가입을 축하드립니다!", Toast.LENGTH_SHORT).show()
finish()
} else {
val message = response.body()?.message
Toast.makeText(this@SignUpActivity, "$message", Toast.LENGTH_SHORT).show()
// 더 줄일 수 있지 않을까
}
}
override fun onFailure(call: Call<ResponseSignUpData>, t: Throwable){
Log.e("NetworkTest", "error:$t")
}
})
}
회원가입 메서드와 비슷한 맥락으로 구현했다.
- 각 메서드별로 같은 Retrofit interface와 Retrofit 객체를 사용해도 된다.