일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 안드로이드 sunflower
- 막내의막무가내 코틀린 안드로이드
- 막내의막무가내 안드로이드 에러 해결
- 막내의막무가내 안드로이드
- 막내의 막무가내
- 막내의막무가내 SQL
- 막내의막무가내 코틀린
- 프래그먼트
- 막내의막무가내 플러터 flutter
- 막내의막무가내 코볼 COBOL
- 안드로이드
- 부스트코스에이스
- 부스트코스
- 막내의막무가내 일상
- 막내의막무가내 rxjava
- 막내의막무가내 안드로이드 코틀린
- flutter network call
- 안드로이드 Sunflower 스터디
- 막내의막무가내 목표 및 회고
- 주택가 잠실새내
- 프로그래머스 알고리즘
- 막무가내
- 막내의막무가내 프로그래밍
- 막내의막무가내
- 막내의막무가내 알고리즘
- Fragment
- 2022년 6월 일상
- 막내의막무가내 플러터
- 주엽역 생활맥주
- 막내의 막무가내 알고리즘
- Today
- Total
막내의 막무가내 프로그래밍 & 일상
[안드로이드] Volley 라이브러리 사용법 본문
출처 및 참고:
https://www.edwith.org/boostcourse-android/lecture/17091/
Volley 라이브러리는 안드로이드 애플리케이션을 위한 네트워킹을 보다 쉽고 빠르게 만들어주는 HTTP 라이브러리입니다. build.gradle(Module)에
implementation 'com.android.volley:volley:1.1.0' 추가해야합니다.
또한 manifests에 <uses-permission android:name="android.permission.INTERNET"/> 도 추가해줘야 기능을 사용할 수 있습니다.
Volley는 웹 요청과 응답을 단순화 시키기 위해 만들어진 라이브러리들 중 하나로서 그중에서도 가장 많이 사용되는 라이브러리 중 하나입니다.
장점은 앞서 말한것처럼 사용자가 직접 스레드 핸들러를 사용해서 네트워킹을 구현하지 않아도 되므로 훨씬 편하고 코드 양도 줄고 빠르게 작업할 수 있다는 장점이 있습니다.
Volley의 구조를 간단히 살펴보면 Request 요청객체를 만들고 이 요청객체를 requestQueue(요청 큐)에 넣어주면 이 requestQueue가 자동으로 웹서버에 요청을 해주고 응답을 받아줍니다.
응답이 오면 처리해주는건 request객체의 Listener에 구현을 하면 알맞게 처리해줍니다.
=======================================
이러한 장점들을 정리해보자면 다음과 같습니다.
- 네트워크 요청의 자동 스케줄링.
- 여러 동시 네트워크 연결.
- 표준 HTTP 캐시 일관성을 갖춘 투명 디스크 및 메모리 응답 캐싱 .
- 요청 우선 순위 지원.
- 취소 요청 API. 단일 요청을 취소하거나 취소 요청의 블록 또는 범위를 설정할 수 있습니다.
- 재시도 및 백 오프와 같은 사용자 지정 용이성.
- 강력한 순서 지정 기능을 사용하면 네트워크에서 비동기 적으로 가져온 데이터로 UI를 쉽게 채울 수 있습니다.
- 디버깅 및 추적 도구.
========================================
이제 예제를 통해 살펴보겠습니다.
-먼저 manifest에 인터넷권한을 넣어줍니다-
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.a82107.myvolley">
<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=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
-build.gradle(Module)에 Volley 라이브러리를 가져다 사용할 수 있게합니다-
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
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'
}
-이건 메인액티비티에 해도 상관은 없는건데 이번 예제같은 경우는 AppHelper라는 스태틱 클래스를 생성하여 여기에 requestQueue를 넣어줍니다.-
import com.android.volley.RequestQueue;
//pplication 클래스를 정의하고 앱에 등록하여 사용하는 경우에는 이 Application 클래스 안에 넣어둘 수도 있고
// AppHelper와 같은 별도의 클래스를 만들어 그 안에 넣어둘 수도 있습니다. 여기서는 후자방법을 사용했습니다.
public class AppHelper {
//static으로 했으므로 어디서나 참조가능하게해놨음
public static RequestQueue requestQueue;
//먼저 요청(Request) 객체를 만들고 이 요청 객체를 요청 큐(RequestQueue)라는 곳에 넣어주기만 하면 됩니다.
//그러면 요청 큐가 알아서 웹서버에 요청하고 응답까지 받아 사용자가 사용할 수 있도록 지정된 메소드를 호출해줍니다.
}
-메인액티비티의 코드인데 주석에 설명을 달아놨습니다.-
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
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;
/*웹서버에 요청하고 응답을 받을 때는 HttpURLConnection을 사용할 수 있습니다.
하지만 요청과 응답을 위한 코드의 양이 많은 데다가 스레드를 사용하면서 더 많은 코드를 넣어주게 됩니다.
그렇다면 코드의 양을 좀 더 적게 할 수 있는 방법은 없을까요?
안드로이드에서 제공하는 HTTP 라이브러리를 사용하면 쉽고 빠르게 네트워크 통신을 할 수 있습니다.
여러 라이브러리 중에 많이 사용되는 대표적인 라이브러리인 Volley 라이브러리를 이용해 HTTP로 요청 하고 응답을 받는 방법에 대해 알아봅시다.
* */
//즉 위내용을 요약하면 requestQueue라고 하는거에서(Volley라이브러리) 스레드를 알아서 처리해주기 때문에
// 사용자가 스레드나 핸들러를 직접적으로 처리할 필요가 없어 코드양이 줄어들고 편리하다는 장점이있다.
//gradle에 Volley라이브러리 추가시켜야함
//manifest에서는 인터넷권한 추가
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.textView);
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sendRequest();
}
});
if(AppHelper.requestQueue == null){
//리퀘스트큐 생성 (MainActivit가 메모리에서 만들어질 때 같이 생성이 될것이다.
AppHelper.requestQueue = Volley.newRequestQueue(getApplicationContext());
}
}
public void sendRequest(){
String url = "https://www.google.co.kr";
//StringRequest를 만듬 (파라미터구분을 쉽게하기위해 엔터를 쳐서 구분하면 좋다)
//StringRequest는 요청객체중 하나이며 가장 많이 쓰인다고한다.
//요청객체는 다음고 같이 보내는방식(GET,POST), URL, 응답성공리스너, 응답실패리스너 이렇게 4개의 파라미터를 전달할 수 있다.(리퀘스트큐에 ㅇㅇ)
//화면에 결과를 표시할때 핸들러를 사용하지 않아도되는 장점이있다.
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());
}
}
){
//만약 POST 방식에서 전달할 요청 파라미터가 있다면 getParams 메소드에서 반환하는 HashMap 객체에 넣어줍니다.
//이렇게 만든 요청 객체는 요청 큐에 넣어주는 것만 해주면 됩니다.
//POST방식으로 안할거면 없어도 되는거같다.
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
return params;
}
};
//아래 add코드처럼 넣어줄때 Volley라고하는게 내부에서 캐싱을 해준다, 즉, 한번 보내고 받은 응답결과가 있으면
//그 다음에 보냈을 떄 이전 게 있으면 그냥 이전거를 보여줄수도 있다.
//따라서 이렇게 하지말고 매번 받은 결과를 그대로 보여주기 위해 다음과같이 setShouldCache를 false로한다.
//결과적으로 이전 결과가 있어도 새로 요청한 응답을 보여줌
request.setShouldCache(false);
AppHelper.requestQueue.add(request);
println("요청 보냄!!");
}
public void println(String data){
textView.append(data + "\n");
}
}
-레이아웃 xml입니다-
<?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"
tools:context=".MainActivity"
android:orientation="vertical">
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="요청" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/holo_blue_bright">
<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"
android:textSize="20dp" />
</LinearLayout>
</ScrollView>
</LinearLayout>
-결과입니다(요청하기 버튼을 클릭하면 해당 웹페이지에 요청을 하면 잠시 후 응답결과들이 스크롤뷰에 나타납니다)
'안드로이드 > 자바 & Previous' 카테고리의 다른 글
[안드로이드] 기억노트 필기 - 리싸이클러뷰 정리 (0) | 2019.03.21 |
---|---|
[안드로이드] 프래그먼트 뒤로가기 했을때 처리 (9) | 2019.03.20 |
[안드로이드] 스레드(Thread) , 핸들러(Handler) 정리 (1) | 2019.03.05 |
[안드로이드] 인텐트 기본 사용방법 (intent) (0) | 2019.03.01 |
[안드로이드] asynctask 사용법 예제(이해하기쉽게 정리) + 병렬 실행 (9) | 2019.02.21 |