Android

[Android] 12주차 스터디 (Volley)

poppy 2021. 2. 19. 23:24
반응형
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를 던졌을 때 리턴되는 결과가 나와있어도 새로 요청해서 새로운 요청에 관해서 결과를 보여줍니다.

 

실행 결과

반응형