안드로이드 스튜디오

[ 안드로이드 스튜디오 ] 네트워크 통신을 위한 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));