front-end/android studio

volley를 이용한 통신

study-minjeong 2024. 8. 21. 20:01

예전에 메로나 프로젝트를 진행할 때, 통신 라이브러리로 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()를 이용해서 파라미터값, 바디값을 넣어주면 된다.