안드로이드 스튜디오
[ 안드로이드 스튜디오 ] 네트워크 통신을 위한 Volley 사용법
zzuvely
2022. 7. 11. 17:47
• volley 라이브러리 추가 ( Gradle Scripts > build.gradle(Module: ~) > dependencies)
dependencies {
...
implementation 'com.android.volley:volley:1.2.1'
}
• volley 사용
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. 버튼을 누르면 editText 에서 유저가 입력한 문자열 가지고 오기
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 클래스를 객체 생성한다.
// 생성자는 : (1) http 메소드, (2) API URL, (3) 전달할 데이터(파라미터), (4) 응답 받으면 실행할 코드, (5) 에러를 받으면 실행할 코드
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, apiUrl, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
// 3. 서버로부터 응답(Response)를 받아서 TextView 에 표시한다.
// API를 호출한 결과가 여기에서 실행된다
// 따라서 우리는 여기에, 가사를 화면에 보여주는 코드를 작성
// 즉, txtLyrics에 가사를 보여준다.
Log.i("MyLyrics :: ", response.toString());
txtLyrics.setText("Response : " + response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// 에러가 났을 때, 무슨 에러인지 Log 보여주기
Log.i("MyLyrics error:: ", error.toString());
}
});
requestQueue.add(jsonObjectRequest);
}
});
}
}
• 네트워크 통신을 위한 AndroidManifest.xml 파일 설정
https://zzuvely.tistory.com/88
[ 안드로이드 스튜디오 ] 네트워크 통신을 위한 AndroidManifest.xml 파일 설정하기
1) AndroidManifest.xml > internernet permission 추가 2) network_security_config 파일 생성 후, 믿을 수 있는 도메인 추가 (res > xml > network_security_config.xml) <?xml version="1.0" encoding="utf-8"..
zzuvely.tistory.com
• volley.TimeoutError 에러 시, 해결법
// 네트워크를 통해서 데이터를 가져올 때
// 시간이 오래 걸리면
// 타임아웃 값을 60초로 늘려준다.
jsonObjectRequest.setRetryPolicy(new DefaultRetryPolicy(60000,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));