안드로이드에서 웹서버에 데이터를 요청하고 응답을 받을 때 HttpURLConnection을 사용합니다.
하지만 요청과 응답을 위한 코드의 양이 많고 스레드를 사용하면서 더 많은 코드를 작성해야 합니다.
더 간단한 HTTP 통신을 위해 안드로이드에서 제공하는 HTTP 통신 라이브러리 Volley 를 사용해봅시다.
- 네트워크 요청의 자동 예약
- 여러 개의 동시 네트워크 연결
- 표준 HTTP 캐시 일관성을 갖춘 투명한 디스크 및 메모리 응답 캐싱
- 요청(Request)의 우선순위 자동으로 관리
- 취소 요청 API
- 강력한 정렬 기능을 이용해 네트워크에서 비동기식으로 가져온 데이터로 UI를 올바로 채우는 작업을 쉽게 실행함
Volley의 작동 구조는 먼저 Request 요청객체를 만들고 이 요청객체를 requestQueue(요청 큐)에 넣어주면 이 requestQueue가 자동으로 웹서버에 요청을 해주고 응답을 받아 사용자가 사용할 수 있게 지정된 메소드를 호출해줍니다.
build.gradle 파일에 다음과 같이 종속성을 추가합니다.
dependencies {
...
implementation 'com.android.volley:volley:1.1.1'
}
또한 인터넷을 사용하므로 AndroidManifest.xml에 권한을 추가합니다.
<uses-permission android:name="android.permission.INTERNET"/>
AppHelper.java
public class AppHelper {
public static RequestQueue requestQueue;
}
MainActivity.java
public class MainActivity extends AppCompatActivity {
TextView textView;
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textView);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sendRequest();
}
});
if(AppHelper.requestQueue != null) {
AppHelper.requestQueue = Volley.newRequestQueue(getApplicationContext());
} //RequestQueue 생성
}
public void sendRequest() {
String url = "https://www.google.co.kr";
StringRequest request = new StringRequest(
Request.Method.GET,
url,
new Response.Listener<String>() { //응답을 잘 받았을 때 이 메소드가 자동으로 호출
@Override
public void onResponse(String response) {
println("응답 -> " + response);
}
},
new Response.ErrorListener() { //에러 발생시 호출될 리스너 객체
@Override
public void onErrorResponse(VolleyError error) {
println("에러 -> " + error.getMessage());
}
}
) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String> params = new HashMap<String,String>();
return params;
}
};
request.setShouldCache(false); //이전 결과 있어도 새로 요청하여 응답을 보여준다.
AppHelper.requestQueue = Volley.newRequestQueue(this); // requestQueue 초기화 필수
AppHelper.requestQueue.add(request);
println("요청 보냄.");
}
public void println(String data) {
textView.setText(data +"\n");
}
}
요청하기 버튼을 누르면 RequestQueue에 요청이 전달되고 Volley가 자동으로 웹서버에 Request를 전달하여 응답을 받아와 화면에 출력.
Reference : 안드로이드 부스트코스 - Volley 사용하기