본문 바로가기
SW - 안드로이드

안드로이드스튜디오 스터디 _ 네트워킹 - (웹으로 요청하기) Volley 사용하기

by 상승남 2019. 1. 5.
728x90
반응형


본 글은 네이버 edwith 안드로이드 부스트코스 과정을 듣고

학습내용을 반복 및 복습 학습의 장으로서 메모하고자 합니다.


저는 코딩 강의를 들으면서 듣지만 이해가 안되며 들리지 않아

금방 졸리게 되어 지속적으로 공부하기가 힘들었습니다.


가장 큰 이유는 강사분이 말씀하시는 언어 및 단어의 해석자체가 안되기 

때문이라고 생각하였습니다.


그래서 모든 설명을 일반적인 언어로 변화 하여 알기 쉽게하여

저같은 비전공자 및 디자이너가 쉽게 이해할 수 있는 수준의 자료로

만드는 것이 목표 입니다.


들어가기 전에

웹서버에 요청하고 응답을 받을 때는 HttpURLConnection을 사용할 수 있습니다.

하지만 요청과 응답을 위한 코드의 양이 많은 데다가 스레드를 사용하면서 더 많은 코드를 넣어주게 됩니다.

그렇다면 코드의 양을 좀 더 적게 할 수 있는 방법은 없을까요?

안드로이드에서 제공하는 HTTP 라이브러리를 사용하면 쉽고 빠르게 네트워크 통신을 할 수 있습니다.

여러 라이브러리 중에 많이 사용되는 대표적인 라이브러리인 Volley 라이브러리를 이용해 HTTP로 요청 하고 응답을 받는 방법에 대해 알아봅시다.

 



학습 목표

  1. Volley 라이브러리가 동작하는 방식을 이해해봅시다.
  2. Volley 라이브러리에서 응답을 받아 화면에 표시하는 과정을 설명해봅시다.

 



핵심 단어

  • Volley
  • 웹 요청과 응답

2019 1.06 업로드 예정

Volley라는 라이브러리는 구글에서 제공한다.

Volley 라이브러리 장점

1. 코드의 양이 적어진다.
2. 스레드를 신경쓰지 않아도 된다.

Volley 라이브러리 시작하기

먼저 아래와 같이 activity_main.xml 을 구성한다.
버튼과 스크롤뷰 그리고 텍스트뷰를 구성을 하였다.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">


<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="요청하기" />

<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/holo_orange_dark">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">

<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>
</ScrollView>


화면을 구성후
MainActivity.java 에서 버튼을 눌렀을때 동작할 수 있는 코드를 작성해 준다.
public class MainActivity extends AppCompatActivity {

TextView textView;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

textView = (TextView)findViewById(R.id.textView);

Button button = (Button)findViewById(R.id.button);

button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

}
});

}

public void println(String data){
textView.append(data + "|n");

}
}


build.gradle(Module: app)
위 메뉴 내부에 있는 dependencies{}에 외부 라이브러리를 명시 할 수 있다.


dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

 dependencies{}내부에 아래와 같이
 implementaion 'com.android.volley:volley:1.1.0'을 명시해 준다.
 명시 후 상단 위 Sync Now를 눌러 적용해 준다.
 외부라이브러리를 인터넷에서 받아와 Volley를 사용할 수 있게 해준다.
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

implementation 'com.android.volley:volley:1.1.0'

}


Volley 라이브러리 사용하기

1. RequestQueue 라는 것을 만들어 준다.
2. RequestQueue 에다가 Request객체를 만들어 넣어준다.
3. Request 객체를 넣어주면 자동으로 요청이 날아 간다.


Volley가 동작하는 매커니즘


1. Volley를 사용하기 위해선 Request객체를 만들어 넣어준다.
2. Request객체는 여러 종류가 있다.
3. 문자열을 보내고 싶을 시 StringRequest 객체를 만들어 넣어준다.
4. RequestQueue 에다가 Request객체를 넣어주면 RequestQueue가 알아서 동작한다.
5. 원래 네트워킹은 스레드가 필요하나 RequestQueue는 그안에 스레드를 생성하여 요청을 보내고 받아
    스레드가 아닌 메인 스레드에서 UI 에 접근할 수 있도록 만들어주는 과정까지 알아서 한다.
6. 개발자는 add() 라고만 하면 끝난다.
7. 응답을 받았을 시에는 Request객체를 만들때 내부에 Listener를 미리 등록한다.
8. RequestQueue 가 처리를 다 한 후 응답을 Listener로 전달해 준다.
9. 개발자는 Request 객체를 만들기만 하면 된다.
10. Volley라는 라이브러리에 RequestQueue 가 알아서 전부 처리 한다고 생각하면 된다. 

RequestQueue 생성방법

1. 애플리케이션 객체를 만들어 넣는다.
2. AppHelper라는 이름으로 클래스를 만들어  여기에 RequestQueue 객체를 
   초기화 해서 넣어두는 방법

* 일반적으러 애플리케이션 안에 넣는 것을 권장

MainActivity.java

public class MainActivity extends AppCompatActivity {

TextView textView;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

textView = (TextView) findViewById(R.id.textView);

Button button = (Button) findViewById(R.id.button);

button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

sendRequest();

}
});


if ( AppHelper.requestQueue ==null) {
AppHelper.requestQueue =Volley.newRequestQueue(getApplicationContext());

}

}

public void sendRequest() {

String url = "http://www.google.co.kr";

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); //매번 받은 결과를 그대로 보여주기 위한 기능

AppHelper.requestQueue.add(request);

println("요청 보냄.");

}


public void println(String data) {
textView.append(data + "\n");

}
}


AppHelper.java

import com.android.volley.RequestQueue;

public class AppHelper {


public static RequestQueue requestQueue;


}









반응형

댓글