반응형
Volley 라이브러리
Volley 라이브러리는 안드로이드 애플리케이션을 위한 네트워킹을 보다 쉽고 빠르게 만들어주는 HTTP 라이브러리이다.
Volley는 웹 요청과 응답을 단순화 시키기 위해 만들어진 라이브러리 중 하나로서, 그 중에서도 retrofit2d와 같이 가장 많이 사용되는 라이브러리이다.
Volley의 장점:
- 네트워크 요청의 자동 예약
- 여러개의 동시 네트워크 연결
- 표준 HTTP 캐시 일관성을 갖춘 투명한 디스크 및 메모리 응답 캐싱
- 요청(Request)의 우선순위 자동으로 관리
- 취소 요청 API
- 강력한 정렬기능을 이용해 네트워크에서 비동기식으로 가져온 데이터로 UI를 올바로 채우는 작업을 쉽게 실행함
Volley 사용법
안드로이드 앱에서 API 서버를 요청한다하면,
- Volley의 작동 구조는, 먼저 Request 요청 객체를 만들고, 이 요청객체를 requestQueue(요청 큐)에 넣어주면 이 requestQueue가 자동으로 웹서버에 요청을 해주고, 응답을 받아 사용자가 사용할 수 있게 지정된 메소드를 호출해준다.
- 응답이 오면, request객체의 Listener에 구현을 하면 알맞게 처리해준다.
- request를 만들어야 하는데, Json으로 통신하기 때문에, JsonObjectrequest 클래스를 객체 생성한다.
Volley Android 개발자 문서:
https://developer.android.com/training/volley?hl=ko
Volley 깃허브 문서:
https://github.com/google/volley
Volley 공식 문서:
https://google.github.io/volley/
안드로이드 스튜디오 좌측 > Gradle Scripts > build.gradle > dependencies > 붙여넣기
implementation 'com.android.volley:volley:1.2.1' |
-> Sync Now
또한, 인터넷을 사용하므로, AndroidManifest.xml에 하기 권한을 추가한다.
<uses-permission android:name="android.permission.INTERNET"/> |
예제: 가수와 노래제목을 입력하면 가사가 나오게하는 API
무료로 가사를 가져올 수 있는 사이트(API 제공)
코드는 하기 참고:
activity_main.xml
더보기
<?xml version="1.0" encoding="utf-8"?> 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" tools:context=".MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> <EditText android:id="@+id/editName" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:ems="10" android:hint="가수이름" android:inputType="textPersonName" android:textSize="28sp" /> <EditText android:id="@+id/editSong" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:ems="10" android:hint="노래명" android:inputType="textPersonName" android:textSize="28sp" /> <Button android:id="@+id/btnLyrics" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:text="가사 가져오기!" android:textSize="28sp" /> <TextView android:id="@+id/txtLyrics" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:text="TextView" android:textSize="28sp" /> </LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout> |
MainActivity
더보기
package com.000.lyrics; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import com.android.volley.DefaultRetryPolicy; import com.android.volley.Request; import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.JsonObjectRequest; import com.android.volley.toolbox.Volley; import org.json.JSONObject; public class MainActivity extends AppCompatActivity { EditText editName; EditText editSong; Button btnLyrics; TextView txtLyrics; final String URL = "https://api.lyrics.ovh/v1/"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editName = findViewById(R.id.editName); editSong = findViewById(R.id.editSong); btnLyrics = findViewById(R.id.btnLyrics); txtLyrics = findViewById(R.id.txtLyrics); // 가사가져오기 버튼 누르면 // 네트워크를 틍해 API 를 호출하고, // 호출한 결과를 화면에 표시한다. btnLyrics.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 1. 버튼을 누르면, 에디트텍스트에서 유저가 입력한 문자열을 // 가지고 온다. String name = editName.getText().toString().trim(); String song = editSong.getText().toString().trim(); // 1-1. 이름과 노래는 데이터가 꼭 있어야 한다. 둘중에 하나라도 // 데이터가 없으면, 유저한테 둘다 필수로 입력하라고 알려준다. if(name.isEmpty() || song.isEmpty() ){ Toast.makeText(getApplicationContext(), "이름이나 노래제목은 필수로 입력하세요.", Toast.LENGTH_SHORT).show(); return; } // 2. 해당 데이터들을 조합하여 API를 호출한다. String apiUrl = URL + name + "/" + song; RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this); // 네트워크 통신을 위한 Request 를 만들어야 하는데, // JSON 으로 통신하기 때문에 // JsonObjectRequest 클래스를 객체 생성한다. // 생성자는 : http 메소드, API URL, 전달할 데이터, 응답받으면 실행할 코드, 에러를 받으면 실행할 코드 JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, apiUrl, null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { // 3. 서버로부터 응답(Response)를 받아서, 텍스트뷰에 표시한다. // API를 호출한 결과가 여기서 실행된다. // 따라서 우리는 여기에다가, 가사를 화면에 보여주는 코드를 작성. // 즉, txtLyrics 에 가사를 보여준다. Log.i("MyLyrics", response.toString()); txtLyrics.setText(response.toString());} }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.i("MyLyrics", error.toString()); } }); // 네트워크를 통해서 데이터를 가져올때 // 시간이 오래 걸리면, // 타임아웃값을 늘려준다. jsonObjectRequest.setRetryPolicy(new DefaultRetryPolicy(60000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); requestQueue.add(jsonObjectRequest); } }); } } |
Androidmanifest.xml
더보기
<?xml version="1.0" encoding="utf-8"?> xmlns:tools="http://schemas.android.com/tools" package="com.000.lyrics" android:targetSandboxVersion="1"> <uses-permission android:name="android.permission.INTERNET"/> <application android:usesCleartextTraffic="true" android:networkSecurityConfig="@xml/network_security_config" android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.Lyrics" tools:targetApi="31"> <activity android:name=".MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> |
res> xml> new file 생성
network_security_config.xml
더보기
<?xml version="1.0" encoding="utf-8" ?> <network-security-config> <domain-config cleartextTrafficPermitted="false"> <domain includeSubdomains="true">*.lyrics.ovh</domain> </domain-config> </network-security-config> |
참고:
반응형
'FrontEnd > Android 기초' 카테고리의 다른 글
[Android] Android Asset 이름 규칙 (0) | 2022.07.17 |
---|---|
[Android] CountDown Timer 사용법 (0) | 2022.07.16 |
[Android] 프로그래스바(Progress Bar) 사용법 (0) | 2022.07.16 |
[Android] 액티비티 라이프 사이클(Activity LifeCycle) 주요 4개 함수 (0) | 2022.07.16 |
[Android] 리니어레이아웃 (LinearLayout) (0) | 2022.07.16 |