출처: https://www.edwith.org/boostcourse-android/lecture/17091/
1. Volley
Volley 라이브러리는 웹 요청과 응답을 단순화시키기 위해 만들어진 라이브러리들 중의 하나이다.
Volley를 사용하는 방법은 Request 객체를 만들고 이 Request 객체를 Request Queue에 넣어주면 된다.
Request Queue는 알아서 웹 서버에 요청하고 응답을 받기 때문에, 스레드를 신경 쓰지 않아도 된다.
Volley를 쓰면,
- 네트워크 Request 우선 순위를 자동으로 관리한다.
- 동시에 여러 네트워크 요청을 할 수 있다.
- 요청을 할 때 Cache 적용 여부를 의식하지 않아도 된다.
- 요청 큐가 내부에서 스레드를 만들고 웹 서버에 요청하고 응답을 받고 나면, 메인 스레드에서 결과를 처리할 수 있도록 만든다.
그 후에 설정한 리스너의 메소드를 호출하기 때문에, 화면에 결과를 표시할 때 핸들러를 사용하지 않아도 된다.
2. 구현 결과 화면
3. build.gradle (app)
Volley는 외부 라이브러리이므로 dependencies에 라이브러리를 추가한다.
4. AndroidManifest.xml
인터넷 권한을 추가한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.tistory.qlyh8.practice"> <uses-permission android:name="android.permission.INTERNET"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name="com.tistory.qlyh8.practice.MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> | cs |
5. activity_main.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.tistory.qlyh8.practice.MainActivity"> <Button android:id="@+id/button" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="요청하기"/> <ScrollView android:id="@+id/scroll_view" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/holo_blue_light" android:padding="10dp"> <TextView android:id="@+id/text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="18sp"/> </ScrollView> </LinearLayout> | cs |
6. AppHelper.java
1 2 3 4 5 6 7 8 9 10 | package com.tistory.qlyh8.practice; import com.android.volley.RequestQueue; public class AppHelper { // RequestQueue 를 static 으로 만들어 어디서든 참조 가능하게 함 public static RequestQueue requestqueue; } | cs |
7. MainActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | package com.tistory.qlyh8.practice; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.TextView; import com.android.volley.AuthFailureError; import com.android.volley.Request; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.StringRequest; import com.android.volley.toolbox.Volley; import java.util.HashMap; import java.util.Map; public class MainActivity extends AppCompatActivity { TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = findViewById(R.id.text_view); findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 버튼을 클릭했을 때 request 객체를 만들고 request queue 에 넣는다. sendRequest(); } }); // request queue 는 앱이 시작되었을 때 한 번 초기화되기만 하면 계속 사용이 가능 if(AppHelper.requestqueue == null) AppHelper.requestqueue = Volley.newRequestQueue(getApplicationContext()); } public void sendRequest(){ String url = "https://www.google.com"; // 문자열을 주고 받기 위한 request 객체는 StringRequest 클래스를 이용해 만들 수 있다. // 요청방식, URL, 리스너, 에러 리스너를 전달한다. // 요청방식: GET, POST 메서드 // URL: 웹서버의 URL 정보 // 리스너: 응답을 성공적으로 받았을 때 리스너의 onResponse 메소드를 자동으로 호출 // 에러 리스너: 에러가 발생했을 때 호출 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 { // 만약 POST 방식에서 전달할 요청 파라미터가 있다면 HashMap 객체에 넣어준다. Map<String, String> map = new HashMap<>(); return map; } }; request.setShouldCache(false); // 이전 결과가 있더라도 새로 요청해서 응답을 보여줌 AppHelper.requestqueue.add(request); // request queue 에 request 객체를 넣어준다. } public void println(String str){ textView.append(str + "\n"); } } | cs |
참고
Volley overview | Android Developers: https://developer.android.com/training/volley/
Send a simple request | Android Developers: https://developer.android.com/training/volley/simple
'Android' 카테고리의 다른 글
AsyncTask를 이용해 이미지 다운로드하기 (0) | 2018.08.04 |
---|---|
Volley 사용하기 - (2) JSON 요청하기 (1) | 2018.07.31 |
HTTP - 2. 웹으로 요청하기 (0) | 2018.07.30 |
HTTP - 1. HTTP란 (0) | 2018.07.30 |
소켓 (Socket) - 3. 소켓 사용하기 (2) (0) | 2018.07.28 |