네트워크 요청 자동 예약 + 동시 네트워크 예약 가능
표준 HTTP 캐시 일관성을 갖춘 토명한 디스크 및 메모리 응답 캐싱(대규모에 x)
UI를 채우기 위해 사용되는 RPC(구조화된 데이터가져오기)
유형작업에 탁월
dependencies{
...
implementation 'com.android.volley: volley: 1.1.1"
}
RequestQueue
를 만들고 Request
객체를 전달하여 Volley를 사용
RequestQueue
: 네트워크 작업 실행, 캐시 읽고 쓰기, 응답 파싱을 위해 작업자 스레드 관리
인터넷 권한 추가
android.permission.INTERNET
newRequestQueue 사용
Volley.newRequestQueue
메소드를 제공val textView = findViewById<TextView>(R.id.text)
...
// RequestQueue 인스턴스객체
val queue = Volley.newRequestQueue(this)
val url = "http://google.com"
// 제공된 URL에서 문자열 응답을 요청
val stringRequest = StringRequest(Request.Method.GET, url,
Response.Listener<String>{ response ->
textView.text = "Response is: ${response.substring(0,500)}"
}, Response.ErrorListener { textView.text = "That didn't work!"})
// RequestQueue에 Request 추가
queue.add(stringRequest)
요청 보내기
.add()
로 RequestQueue에 추가, 추가 후 요청이 파이프라인 통해 이동해 파싱되어 전달요청 취소
cancel()
호출
onStop()
메소드에서 대기중인 요청을 취소함onSvaeInstanceState()
, getActivity() == null
검사 // 태그 정의하여 요청에 추가
val TAG = "MyTag"
val stringRequest: StringRequest
val requestQueue: RequestQueue?
// request에 태그 설정
stringRequest.tag = TAG
// reequestQueue에 요청 추가
requestQueue?.add(stringRequest)
// 이 태그가 포함된 모든 요청을 취소
protected fun onStop(){
super.onStop()
requestQueue?.cancelAll(TAG)
}
RequestQueue가 작업 실행에 필요한 2가지: 요청에 전송할 네트워크
, 캐싱을 처리할 캐시
DiskBaseCache
: 응답당 캐시파일 하나를 메모리 내 색인 제공
BasicNetwork
: 선호하는 HTTP 클라이언트 기반으로 한 네트워크 전송 제공
// 캐시 인스터화
val chache = DiskBaseCache(cacheDir, 1024*1024)
// HttpURLConnection을 HTTP 클라이언트로 사용하도록 네트워크를 설정
val network = BasicNetwork(HurlStack())
// 캐시와 네트워크로 RequestQueue를 인스턴스화, 대기열을 시작
val requestQueue = RequestQueue(cache, network).apply{
start()
}
val url = "http://www.example.com"
// 요청공식화, 응답처리
val stringRequest = StringRequest(Request.Method.GET, url,
Response.Listener<String>{ response -> // 요청 작성 },
Response.ErrorListener{ error -> // 핸들러에러
textView.text = "ERROR: %s".format(error.toString())})
// RequestQueue에 요청 추가
requestQueue.add(stringRequest)
네트워크를 지속적으로 사용하는 경우 RequestQueue의 단일 인스턴스
를 설정하는 것이 가장 효율적
RequestQueue 및 Volley 기능을 캡슐화하는 싱글톤 제작
Activity 컨텍스트가 아닌 Application
컨텍스트로 requestQueue를 인스터화
// 싱글톤 클래스 사용해 RequestQueue 작업 실행하는 예
// Get
val queue = MySingleton.getInstance(this.applicationContext).requestQueue
// RequestQueue에 요청 추가
MySingleton.getInstance(this).addToRequestQueue(stringRequest)
Volley에서 지원하는 일반적인 요청 유형
StringRequest
: URL 지정, 응답으로 원시 문자열 수신JsonObjectRequest
, JsonArrayRequest
: URL을 지정, 응답따라 JSON객체/배열 가져옴요청 JSON
Volley에서 JSON 요청 클래스 제공
JsonArrayRequest
: 지정된 URL에 JSONArray의 응답 본문을 가져옴
JsonObjectRequest
: 지정된 URL에 JSONObject의 응답 본문을 가져오기 위한 요청
```kotlin
var url = "http://my-json-feed"
val jsonObjectRequest = JsonObjectRequest(Request.Method.GET, url, null,
Response.Listener { response ->
textView.text = "Response: %s".format(response.toString())
}, Response.ErrorListener { error -> / Handler 에러 / }
// 싱글톤 클래스를 통해 RequestQueue에 액세스
MySingleton.getInstance(this).addToRequestQueue(jsonObjectRequest)