예전에 메로나 프로젝트를 진행할 때, 통신 라이브러리로 volley를 사용했었다.
그 당시에는 급하게 프로젝트를 완성해야해서 어떻게 사용하는지도 잘 모르고, 예제를 보고 대충 가져다 썼었다.
이번에 리팩토링할 때, 어떻게 volley를 사용하고, 간단하게 요청하여 사용할 수 있을지 공부해보려고 한다!
Volley 소개
간단한 http 통신을 위해 안드로이드에서 제공하는 http통신 라이브러리이다.
장점
네트워크 요청의 자동 예약이 가능하고, 여러 개의 동시 네트워크를 연결할 수 있다.
요청 우선순위를 자동으로 관리하고, 비동기식으로 가져온 데이터를 ui에 쉽게 적용할 수 있다.
사용 방법
1. 요청 객체를 만들어 요청 큐에 넣어줌
2. 요청 큐가 알아서 웹 서버에 요청하고 응답을 받음
3. 응답 메서드를 만들어 두면 응답이 왔을 때 알아서 처리
적용
1. dependency 추가
implementation 'com.android.volley:volley:1.1.1'
2. 권한 추가 (AndroidManifest.xml)
<uses-permission android:name="android.permission.INTERNET"/>
3. 통신 코드
companion object{
var requestQueue: RequestQueue?=null
}
// 함수 내부에서 통신 요청
val stringRequest: StringRequest = object : StringRequest(
Method.POST, url,
Response.Listener {
Log.d("성공", "")
},
Response.ErrorListener {
Log.d("실패", it.toString()) }
}) {
override fun getBody(): ByteArray {
val json = JSONObject()
json.put("test", ""+test.text.toString())
return json.toString().toByteArray()
}
override fun getBodyContentType(): String? {
return "application/json; charset=utf-8"
}
}
requestQueue = Volley.newRequestQueue(this)
queue.add(stringRequest)
}
1) 요청 큐(RequestQueue)는 앱 전체에서 사용하는 것이 일반적이다.
-> 실무에서는 Application클래스 안에 두거나 별도의 클래스를 생성하여 넣어둔다.
-> Volley.newRequestQueue()를 사용하여 생성해준다.
2) 요청 객체로 StringRequest를 사용했다.
문자열을 주고받기 위한 요청 객체이며, Volley 라이브러리 안에 여러 유형의 요청 객체들이 있다.
3) 요청 객체를 새로 할당할 때 4개의 파라미터를 전달해주어야 한다.
(1) 요청 방식 지정
(2) 웹 주소
(3) 응답 받을 리스너 객체 -> onResponse() 메서드는 자동 호출
(4) 에러가 발생했을 때 호출될 리스너 객체
4) getParams() / getBody()를 이용해서 파라미터값, 바디값을 넣어주면 된다.