본문 바로가기
Java/AndroidStudio

Android - 인터넷으로 JSON을 가져오는 Volley 사용법, 인터넷 권한

by 하니__ 2024. 6. 10.

 

 

Volley overview

Volley overview Volley is an HTTP library that makes networking for Android apps easier and most importantly, faster. Volley is available on GitHub. Volley offers the following benefits: Automatic scheduling of network requests. Multiple concurrent network

google.github.io

 

사용설명에 따라

인터넷에 접근하는 라이브러리를 설치한다

implementation ("com.android.volley:volley:1.2.1")

 

 

 

그리고 인터넷에 접근하기 위해

인터넷 권한을 받아야 하는데 아래의 파일로 들어가자

 

 

권한을 뜻하는 permission을 

어플리케이션과 동등한 위치에 넣어주자

<uses-permission android:name="android.permission.INTERNET">

 

 

RequestQueue queue = Volley.newRequestQueue(MainActivity.this);

데이터타입은 응답의 json 형식을 보고 결정
{}시작끝이라면 Object [] 시작끝이라면 Array

JsonObjectRequest request = new JsonObjectRequest(
        Request.Method.GET,
        "JSON의 URL",
        null,
        new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
            progressBar.setVisibility(View.GONE);
            }
        },
        new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                progressBar.setVisibility(View.GONE);
                Toast.makeText(MainActivity.this,
                        "네트워크 통신 에러",
                        Toast.LENGTH_SHORT).show();
            }
        }
);

queue.add(request);

Volley 객체 생성후

가져올 json의 형식을 먼저 확인후

오브젝트인지 어레이인지로 선택후

이번경우는 오브젝트기때문에

제이슨 오브젝트 리퀘스트로 가져온다

첫번째 파라미터에는 리퀘스트.메소드.겟 으로 설정 하여

HTTP메소드를 설정

두번째 파라미터에는 가져올 JSON이 담겨있는 URL을 입력

세번째 파라미터에는 body에 담겨있는 json을 가져오는데

HTTP 메소드가 GET이기때문에 없으니까

NULL로 설정

 

그리고 리스폰스에 리스너와

리스폰스에 에러리스너를 설정

리스너는 성공했을때와

에러리스너는 에러가 났을때의 경우

 

그렇기에

둘 다 진행중을 알리는 프로그레스바를 설정하여

끝나면 사라지게 설정하고

에러리스너에는 토스트로 에러메세지 출력

 

그리고 queue.add로 리퀘스트를

네트워크로 보내 해당 JSON을 읽어올수 있다

 

 

Body에서 받아오는 정보는 없지만 헤더에 정보가 담긴 경우
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
    Map<String, String> headers = new HashMap<>();
    headers.put("Authorization", "Bearer your_token");
    headers.put("Custom-Header", "header_value");
    return headers;
}

getHeader()를 오버라이드 해주자

 

 

쿼리파람에 정보가 있는 경우
String url = "https://example.com/api/resource?param1=value1&param2=value2";

JsonObjectRequest request = new JsonObjectRequest(
    Request.Method.GET,
    url,
    null,
    new Response.Listener<JSONObject>()

url에 정보가 충분히 담기니 url에만 넣어주도록 하자