반응형
Volley
- HTTP 통신 라이브러리
- 안드로이드에서 웹서버에 데이터를 요청하고 응답을 받을 때 HttpURLConnection을 사용하는 통신을 간단하게 해준다
- 여러 개의 동시 네트워크 연결
- 표준 HTTP 캐시 일관성을 갖춘 투명한 디스크 및 메모리 응답 캐싱
- 요청(Request)의 우선순위 자동으로 관리
Volley의 작동 구조는 다음 그림과 같습니다. 먼저 Request 요청객체를 만들고 이 요청객체를 requestQueue(요청 큐)에 넣어주면 이 requestQueue가 자동으로 웹서버에 요청을 해주고 응답을 받아 사용자가 사용할 수 있게 지정된 메소드를 호출해줍니다.
이제 Volley를 사용하여 웹서버와 통신해보겠습니다!
1. build.gradle에 다음 코드를 추가합니다
implementation 'com.android.volley:volley:1.1.1'
2. 인터넷 권한을 추가합니다 - AndroidMainfest.xml
<uses-permission android:name="android.permission.INTERNET"/>
3. 뷰 만들기 - activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="통신"/>
<TextView
android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_below="@+id/start"/>
</RelativeLayout>
4. AppHelper.java
public class AppHelper {
public static RequestQueue requestQueue;
}
5. 코드 작성 - MainActivity.java
public class MainActivity extends AppCompatActivity {
TextView content;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button start = findViewById(R.id.start); // 통신 버튼
content = findViewById(R.id.content); // 요청에 대한 응답을 보여주는 텍스트뷰
// 통신버튼 클릭시
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
sendRequest(); // 통신 요청 메소드 실행
}
});
if(AppHelper.requestQueue != null) {
AppHelper.requestQueue = Volley.newRequestQueue(getApplicationContext());
}
}
// 통신 요청 메소드
public void sendRequest() {
String url = "https://www.google.com"; // 통신할 웹 url
// request 요청 객체 생성
StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) { // 통신 성공한 경우
printContent("응답 = " + response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) { // 통신 실패한 경우
printContent("에러 = " + error.getMessage());
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> map = new HashMap<>();
return map;
}
};
request.setShouldCache(false);
AppHelper.requestQueue = Volley.newRequestQueue(this); // requestQueue는 사용하기 전에 반드시 초기화를 해야함
AppHelper.requestQueue.add(request); // 요청 큐에 request객체 추가
}
// 텍스트뷰에 텍스트 지정하는 메소드
public void printContent(String data) {
content.setText(data);
}
}
StringRequest(통신 요청 방식, 요청할 url, 응답 리스너)
getParams() - POST방식에서 요청을 날릴 때 파라미터를 넘기는 경우에 사용하는 메소드입니다. 이 예제에서는 GET방식으로 통신하므로 굳이 필요하진 않습니다
request.setShouldCache(false); - false라고 지정하면 request를 던졌을 때 리턴되는 결과가 나와있어도 새로 요청해서 새로운 요청에 관해서 결과를 보여줍니다.
실행 결과
반응형
'Android' 카테고리의 다른 글
[Android + FirebaseML] Android에서 커스텀 Tensorflow Lite 모델 사용하기 (4) | 2021.05.15 |
---|---|
[Android] RxJava란? (0) | 2021.05.14 |
[Android] 11주차 스터디 (Firebase Storage with Glide) (0) | 2021.01.27 |
[Android] 10주차 스터디 (Firebase 클라우드 메시징 (FCM)) (0) | 2021.01.14 |
[Android] 9주차 스터디 (Glide) (0) | 2021.01.07 |