이번엔 앱과 서버를 연결해보았다.
앱 연동을 위해서 retrofit을 이용해보았다.
선언부
val gson = GsonBuilder()
.setLenient()
.create()
var retrofit = Retrofit.Builder()
.baseUrl("http://192.168.45.200:3001/")
.addConverterFactory(GsonConverterFactory.create(gson))
.build()
var loginService = retrofit.create(loginService::class.java)
로컬에서만 진행을 하기때문에 웹 연동때는 로컬주소를 이용해 url을 넣어주었지만,
앱 연동을 위해서는 실제 ip를 넣어줘야 연동이 되었다.
loginService interface
interface loginService{
@POST("/login")
fun requestLogin( //인풋
@Body jsonparams: Login
) : Call<LoginResult> //아웃풋
}
Login클래스를 이용해 객체로 요청을 보내고 리턴값을 LoginResult 클래스를 이용해 받아준다.
Login 클래스
data class Login(
var id : String? = null,
var pwd : String? = null
)
LoginResult 클래스 (@SerializedName을 이용해 객체에 리턴값을 넣어주면 매핑 해준다.)
data class LoginResult(
@Expose
@SerializedName(value = "id")
public val id: String? = null,
@Expose
@SerializedName(value = "pwd")
public val pwd: String? = null,
@Expose
@SerializedName(value = "msg")
public val msg: String? = null
)
equeue로 요청을 보내고 아래와 같은 방식으로 통신
loginService.requestLogin(data).enqueue(object : Callback<LoginResult> {
override fun onResponse(call: Call<LoginResult>, response: Response<LoginResult>) {
var login = response.body()
var dialog = AlertDialog.Builder(this@MainActivity)
dialog.setTitle("성공")
dialog.setMessage("id : ${login?.id}, pw:${login?.pwd},msg : ${login?.msg}")
dialog.show()
}
override fun onFailure(call: Call<LoginResult>, t: Throwable) {
var dialog = AlertDialog.Builder(this@MainActivity)
Log.d("abcd",t.message.toString())
dialog.setTitle("실패")
dialog.setMessage("$id,$pwd")
dialog.show()
}
})
결과