반응형
모든 내용은 Do it! 안드로이드 앱 프로그래밍을 바탕으로 정리한 것입니다.
Volley 라이브러리
웹 요청과 응답을 단순화하기 위해 만들어진 라이브러리
- 사용법
- 요청(Request) 객체를 만들고 이 요청 객체를 요청 큐(RequestQueue)라는 곳에 넣어줌
- 요청 큐(RequestQueue)가 알아서 웹서버에 요청하고 응답까지 받아줌.
- 응답을 받을 수 있도록 메서드를 만들어두기만 하면 응답이 왔을 때 자동으로 해당 메서드 호출
- 장점
- 스레드(Thread)를 신경쓰지 않아도 됨
- 요청 큐가 내부에서 스레드를 만들어 웹서버에 요청하고 응답받는 과정 진행
- 응답을 처리할 수 있는 메서드를 호출할 때는 메인 스레드에서 처리할 수 있도록 만듦 → 핸들러(Handler) 사용할 필요 없음
[ 예제 ]
build.gradle(app)
dependencies 중괄호 안에 라이브러리 정보 추가 후 Sync Now
dependencies {
...
implementation 'com.android.volley:volley:1.1.0'
}
AndroidManifest.xml
이전 '웹으로 요청하기' 포스팅과 같은 설정
<manifest ...>
<uses-permission android:name="android.permission.INTERNET" />
<application
...
android:usesCleartextTraffic="true">
VolleyActivity.java
public class VolleyActivity extends AppCompatActivity {
EditText editText;
TextView textView;
static RequestQueue requestQueue;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_volley);
editText = findViewById(R.id.volley_edittext);
textView = findViewById(R.id.volley_textview);
Button button = findViewById(R.id.volley_btn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
makeRequest();
}
});
// RequestQueue 객체 생성
if (requestQueue == null) {
requestQueue = Volley.newRequestQueue(getApplicationContext());
}
}
public 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) {
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);
requestQueue.add(request);
println("요청 보냄");
}
public void println(String data) {
textView.append(data+"\n");
}
}
- 사용자가 버튼을 클릭했을 때 요청 객체를 만들고 요청 큐에 넣음
- 요청 큐(RequestQueue)는 앱 전체에서 사용하는 것이 일반적 → static 키워드 사용
- 따라서 실제 앱을 만들 때는 Application 클래스 안에 두거나 별도의 클래스를 하나 만들어서 넣어둠
- Volley.newRequestQueue() 메서드를 사용하여 요청 큐 생성
- 요청 객체는 StringRequest 클래스 사용
- StringRequest 클래스는 문자열을 주고받기 위한 요청 객체이며, Volley 라이브러리 안에 여러 유형의 요청 객체 있음
- 일반적으로 StringRequest 만으로 충분함
- 요청 객체를 새로 할당할 때 4개의 파라미터 전달
- 요청 방식 지정 : GET() 또는 POST() 메서드 전달
- 웹 사이트 주소
- 응답 받을 리스너 객체 : 해당 리스터 객체의 onResponse() 메서드는 응답 받았을 때 자동 호출
- 에러가 발생했을 때 호출될 리스너 객체
- 해당 예제에서는 GET 방식을 이용했지만, POST 방식을 사용하면서 요청 파라미터를 전달하려고 할 때는 getParams() 메서드에서 반환하는 HashMap 객체에 파라미터 값을 넣어주면 됨.
- 요청 객체 생성 후에는 해당 객체를 요청 큐에 넣어줌
- add() 메서드로 요청 객체를 넣으면 요청 큐가 자동으로 요청과 응답 과정을 진행함
- 요청 객체는 cache 메커니즘을 지원하는데 만약 이전 응답 결과를 사용하지 않겠다면 setShouldCache() 메서드를 false
- 결론적으로 스레드나 핸들러를 사용하지 않았는데 이전 포스팅의 결과와 같은 것을 확인할 수 있음
*핸들러와 이전 네트워킹 포스팅은 아래 주소로!
반응형
'ANDROID > Android 앱 프로그래밍' 카테고리의 다른 글
[Android] 데이터베이스(Database)와 내용 제공자(Content Provider) (0) | 2021.07.06 |
---|---|
[Android] 모바일 데이터베이스(Database)와 테이블(Table) 생성 (3) | 2021.07.04 |
[Android] Retrofit2를 사용한 API 통신 (0) | 2021.07.04 |
[Android] JSON 데이터를 RecyclerView로 다루기 (0) | 2021.07.02 |
[Android] 웹으로 요청하기 (0) | 2021.06.30 |
[Android] 소켓(Socket) 사용하기 (0) | 2021.06.28 |
[Android] 네트워킹(Network) (0) | 2021.06.27 |
[Android] AsyncTask 사용하기 (0) | 2021.06.23 |
댓글