Volley 라이브러리 : 웹 요청과 응답을 단순화하기 위해 만들어진 라이브러리
스레드, 핸들러를 사용하지 않아도 되는 장점이 있음.
🚩Volley 사용하기
지난번 예제랑 비슷하다. 단지 Volley를 사용하는 걸로 바뀐 것 뿐.
[ Volley 사용하는 순서 ]
1. 요청(Request) 객체를 만든다.
2. 요청 큐(RequestQueue)에 요청 객체를 넣는다.
이러면 알아서 요청 큐가 웹 서버에 요청하고 응답까지 받아줌.
1️⃣build.gradle
dependencies {
implementation("com.android.volley:volley:1.2.1")
2️⃣activity_main.xml
저번 거랑 동일하게 만든다.
3️⃣AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:usesCleartextTraffic="true"
4️⃣MainActivity.java
🔹전체코드🔹
package com.example.chapter10_4;
public class MainActivity extends AppCompatActivity {
EditText editText;
TextView textView;
static RequestQueue requestQueue;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = findViewById(R.id.editTextText);
textView = findViewById(R.id.textView);
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
makeRequest(); // makeRequest 메서드 작성
}
});
if(requestQueue==null){ // requestQueue 객체 생성하기
requestQueue = Volley.newRequestQueue(getApplicationContext());
}
}
private void makeRequest() {
String url = editText.getText().toString();
StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
textView.append("응답->"+response+"\n");
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
textView.append("에러->"+error.getMessage()+"\n");
}
})
{
@Nullable
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String> params = new HashMap<String, String>();
return params;
}
};
request.setShouldCache(false);
requestQueue.add(request);
textView.append("요청 보냄.\n");
}
}
🔹MainActivity🔹
public class MainActivity extends AppCompatActivity {
EditText editText;
TextView textView;
static RequestQueue requestQueue;
RequestQueue 객체를 정의한다. 요청 큐는 한 번만 만들어 계속 사용할 수 있기 때문에 static 키워드로 클래스 변수를 선언한 후에 할당한다. (요청 큐는 한 액티비티에서만 사용하지 않고 보통 앱 전체에서 사용하기 때문에, Application 클래스 안에 넣어두거나 별도의 클래스를 하나 만들어서 넣어둔다.)
🔹onCreate🔹
if(requestQueue==null){ // requestQueue 객체 생성하기
requestQueue = Volley.newRequestQueue(getApplicationContext());
}
Volley.newRequestQueue 메서드로 requestQueue 객체를 생성한다.
🔹onClick🔹
public void onClick(View view) {
makeRequest(); // makeRequest 메서드 작성
}
버튼 클릭 시 makeRequest 메서드를 실행한다.
🔹makeRequest🔹
지난 예제의 코드보다 덜 복잡한 것 같기도 하고.. 아닌 것 같기도 하고.. 그래도 형태는 저번보다 쬐금 단순해 보인다.
- StringRequest 객체를 만든다. (4개의 파라미터 전달)
- getParams 메서드를 재정의
- 캐시 설정, 요청 객체 넣기
private void makeRequest() {
String url = editText.getText().toString();
// StringRequest : 문자열을 주고 받기 위해 사용하는 요청 객체
// 요청 객체를 new 연산자로 만들 때는 4개의 파라미터를 전달할 수 있다.
StringRequest request = new StringRequest(Request.Method.GET,/*파라미터1: GET 또는 POST 메서드 전달*/
url,/*파라미터2: 웹사이트 주소 전달*/
new Response.Listener<String>() { /*파라미터3: 응답받을 리스너 객체 전달*/
@Override
public void onResponse(String response) { // onResponse : 응답을 받았을 때 자동 호출됨.
textView.append("응답->"+response+"\n");
}
},
new Response.ErrorListener() { /*파라미터4: 에러가 발생했을 때 호출될 리스너 객체 전달*/
@Override
public void onErrorResponse(VolleyError error) {
textView.append("에러->"+error.getMessage()+"\n");
}
})
{
@Nullable
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String> params = new HashMap<String, String>();
// 만약 GET이 아닌 POST 방식을 사용할 경우 HashMap 객체(params)에 파라미터 값들을 넣어주면 됨.
return params;
}
};
request.setShouldCache(false); // 이전 응답 결과를 사용하지 않겠다면 setShouldCache(false)로 설정.
requestQueue.add(request); // add 메서드로 요청 큐에 요청 객체를 넣는다.
textView.append("요청 보냄.\n");
}
5️⃣실행 결과
지난번 결과와 동일함. 근데 이번엔 한번 책에 나온 주소가 아닌 걸로 입력해보았다.
제대로 된 url을 입력했으나 반환되는 내용이 없으면 null,
아예 이상한 url을 입력하면 BAD URL
이런 식으로 에러 상황에 맞게 에러메시지가 뜨는 것을 확인할 수 있었다.
'TIL > 안드로이드 스튜디오' 카테고리의 다른 글
10장 - JSON 데이터 다루기 (Gson🐭) (0) | 2025.02.02 |
---|---|
오픈 API 키값 발급받기 (0) | 2025.01.31 |
10장 - HTTP로 웹 서버에 접속하기 (🤨) (0) | 2025.01.31 |
10장 - 네트워킹 (0) | 2025.01.30 |
도전!17 - 패널을 번갈아가며 보여주기 (0) | 2025.01.26 |