상세 컨텐츠

본문 제목

[안드로이드] HTTP 통신 Volley 사용법 part2 - JSON 요청 및 파싱

안드로이드

by aries574 2022. 5. 8. 13:02

본문


이번 시간에는 Volley 라이브러리를 이용해서 JSONObject 형태로 호출하고 응답받아서 데이터를 파싱 하는 방법을 알아보겠습니다. 


목차

1. 실행 화면

2. 권한 등록

3. 라이브러리 등록

4. 메인 화면 구성 activity_main.xml

5. 메인 코드 구현 MainActivity.java


1. 실행 화면

 

2. 권한 등록

AndroidManifest.xml

 manifest 태그 안에 추가

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

 application 태그안에 아래 코드 추가(Http 호출 허용)

android:usesCleartextTraffic="true"

 

3. 라이브러리 등록

build.gradle(Module:프로젝트명:app)

dependencies 괄호 안에 아래 코드를 넣어주시면 됩니다.

implementation 'com.android.volley:volley:1.2.1'

 

 

4. 메인 화면 구성 activity_main.xml

 - 설명 -

 1. 첫 번째 텍스트뷰는 원본데이터를 보여줍니다.

 2. 두 번째 텍스트뷰는 원본데이터를 파싱 해서 보여줍니다.

 3. 버튼을 누르면 api호출해서 데이터를 가져옵니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    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"
    android:orientation="vertical">

    <TextView
        android:id="@+id/text_original"
        android:layout_width="match_parent"
        android:layout_height="150dp"
        android:background="@android:color/holo_green_dark"
        android:textSize="15sp" />

    <TextView
        android:id="@+id/text_parse"
        android:layout_width="match_parent"
        android:layout_height="250dp"
        android:layout_marginTop="20dp"
        android:background="@android:color/holo_blue_dark"
        android:textSize="15sp" />

    <Button
        android:id="@+id/send_btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="Send"
        android:textSize="20sp" />
</LinearLayout>

 

5. 메인 코드 구현 MainActivity.java

- 설명 - 

  1. JsonObjectRequest jsonObjectRequest = new JsonObjectRequest

     JSONObject타입으로 호출해서 JsonObject타입으로 전달받습니다.

  2. parseData(response);

     전달받은 데이터를 파싱처리할 메서드에 매개변수로 전달합니다.

  3. object.getJSONObject("data");

     return받을 데이터 타입이 JSONObject, key값은 data입니다.

  4. object.getString("status");

     return받을 데이터 타입이 String, key값은 status입니다. 

  5. Iterator iterator = data.keys();

     전체 key값을 변수에 담습니다.

  6. data.getString(key);

     key값을 통해 데이터를 꺼내옵니다.

public class MainActivity extends AppCompatActivity  {

    //선언
    RequestQueue queue;

    TextView textOri, textParse;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textOri = findViewById(R.id.text_original);
        textParse = findViewById(R.id.text_parse);
        Button sendBtn = findViewById(R.id.send_btn);

        //초기화(null이면 값을 초기화)
        if(queue == null) {
            queue = Volley.newRequestQueue(this);
        }

        String url = "https://api.bithumb.com/public/ticker/ETC_KRW";

        //JSON형태로 호출 및 응답 받기

        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET,
                url, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {

                //응답받은 JSONObject에서 데이터 꺼내오기
                parseData(response);

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                //오류 발생 시 실행
                Toast.makeText(MainActivity.this, "error: " + error.toString()
                        , Toast.LENGTH_SHORT).show();
            }
        });

        //버튼 이벤트
        sendBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                queue.add(jsonObjectRequest);
            }
        });


    }//onCreate

    /**
     * 데이터 꺼내오기
     * @param object 원본데이터
     */
    private void parseData(JSONObject object) {

        //상태값
        String status = "";

        //원본 텍스트뷰에 담기
        textOri.setText(object.toString());

        //키값 리스트
        ArrayList<String> keyList = new ArrayList<>();

        try {
            //data 담기
            JSONObject data = object.getJSONObject("data");

            //status 담기
            status = object.getString("status");

            //data안의 전체 키값 담기
            Iterator iterator = data.keys();

            //반복문을 통해 list에 키값 담기
            while(iterator.hasNext()){

                String s = iterator.next().toString();

                keyList.add(s);

                //파싱 텍스트뷰에 담기
                textParse.append("status: " + status + "\n");

                //data안의 키값으로 데이터 꺼내오기
                for(int i = 0; i < keyList.size(); i++){

                    //키값 변수에 담기
                    String key = keyList.get(i).toString();

                    //키값을 통해 데이터 꺼내오기
                    String value = data.getString(key);

                    //파싱 텍스트뷰에 담기
                    textParse.append(key + ": " + value + "\n");
                }
            }

        }catch(JSONException e){

            e.printStackTrace();
        }
    }
    
}//MainActivity

2022.04.29 - [안드로이드] - [안드로이드] LineChart 만드는 방법 part1 - 기본 구현

 

[안드로이드] LineChart 만드는 방법 part1 - 기본 구현

이번 시간에는 LineChart를 만드는 방법을 알아보겠습니다. 목차 1. 실행 화면 2. 라이브러리 등록 3. 메인 화면 구성 activity_main.xml 4. 메인 코드 구현 MainActivity.java 1. 실행 화면 2. 라이브러리 등록..

aries574.tistory.com

2022.03.02 - [안드로이드] - [안드로이드] SQLite RecyclerView 연락처 만드는 방법 part1 - 조회

 

[안드로이드] SQLite RecyclerView 연락처 만드는 방법 part1 - 조회

앞으로 SQLite, RecyclerView를 통해서 연락처 만드는 방법을 알아보겠습니다. 내용이 많다 보니 조회, 등록, 수정, 삭제 별로 나눠 올리겠습니다. 이번에는 조회 부분입니다. 목차 1. 실행 화면 2. 연락

aries574.tistory.com

2022.02.18 - [안드로이드] - [안드로이드] 사각형(Rectangle), 원형(Oval), 선(Line) 모양 쉽게 만드는 방법 - Drawable.xml

 

[안드로이드] 사각형(Rectangle), 원형(Oval), 선(Line) 모양 쉽게 만드는 방법 - Drawable.xml

이번 시간에는 사각형, 원형, 선 모양을 파일에 설정해놓고 갖다 쓰는 방법에 대하여 알아보겠습니다. 목차 1. 실행 화면 2. 사각형 파일 만들기 3. 원형 파일 만들기 4. 선 파일 만들기 5. 메인 화

aries574.tistory.com

 

반응형

관련글 더보기

댓글 영역