[안드로이드] 웹 서버에 데이터 요청 (Open API 활용)

2022. 3. 30. 10:09·앱 개발/Java
반응형

 

영화진흥위원회의 오픈 API를 활용했습니다.

 

 

https://www.kobis.or.kr/kobisopenapi/homepg/apiservice/searchServiceInfo.do

 

영화진흥위원회 오픈API

제공서비스 영화관입장권통합전산망이 제공하는 오픈API서비스 모음입니다. 사용 가능한 서비스를 확인하고 서비스별 인터페이스 정보를 조회합니다.

www.kobis.or.kr

 

사이트에 들어가셔서 맨 아래의 응답 예시에서 JSON 부분을 사용했습니다. 전체 복사하신후 입력해주시면 됩니다 

 

 


 

 

우선 오픈 API를 사용하기 위해 Manifest에 필요한 권한을 추가해줍니다

 

 

[AndroidManifest.xml]

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

<application
    android:usesCleartextTraffic="true"

 

userCleartextTraffic 속성도 꼭 true로 바꿔주셔야 합니다!!!!

왜냐하면?

android:usesCleartextTraffic는 모든 Http 사이트에 대한 접근을 허용합니다. 만약 몇몇 사이트에 대한 접근만 허용하려면 /res/xml/network_security_config.xml 파일을 생성하고 예외 항목들을 추가해야 합니다.

 

 

[MainActivity.java]

package org.techtown.samplehttp;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class MainActivity extends AppCompatActivity {
    EditText editText;
    TextView textView;

    Handler handler = new Handler();

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

        editText = findViewById(R.id.editText);
        textView = findViewById(R.id.textView);

        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final String urlStr = editText.getText().toString();

                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        request(urlStr); //request메서드 안에서 인터넷을 사용할 것이므로 Thread 안에서 동작하도록 Thread 객체 생성
                    }
                }).start();
            }
        });
    }

    public void request(String urlStr){ // 응답 결과물 모아 화면에 출력
        StringBuilder output = new StringBuilder();
        try {
            URL url = new URL(urlStr); // url 객체 만들어

            HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // 파라미터로 전달된 url 문자열을 이용해 openconnection 메서드 호출 => HttURL 객체 반환
            if (conn != null) {
                conn.setConnectTimeout(10000); // 연결 대기 시간 설정 (10초 동안 연결 대기)
                conn.setRequestMethod("GET"); //GET 방식으로 요청하는 내용 setRequestMethod로 설정
                conn.setDoInput(true); // 이 객체의 입력이 가능하도록 true

                int resCode = conn.getResponseCode(); // 메서드 호출 => 이 시점에 내부적으로 웹 서버에 페이지를 요청하는 과정 수행
                BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); //응답으로 들어온 스트림 문자열로 변환하여 반환
                String line = null;
                while (true) { // 응답코드가 HTTP_OK 인 경우
                    line = reader.readLine();  //readLine = 스트림에서 한 줄씩 읽어 들이는 메서드
                    if (line == null) {
                        break;
                    }
                    output.append(line + "\n");
                }
                reader.close();
                conn.disconnect();
            }
        } catch (Exception ex) {
            println("예외 발생함: " + ex.toString());
        }
        println("응답-> " + output.toString());

    }
    public void println(final String data) {
        handler.post(new Runnable() {
            @Override
            public void run() {
                textView.append(data + "\n");
            }
        });
    }
}

 

 

 

[activity_main.xml]

<?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"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textPersonName"
        android:hint="사이트 주소 입력" />

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button" />

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/textView"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="20sp" />
        </LinearLayout>
    </ScrollView>
</LinearLayout>

 

 

실행화면입니다. 이렇게 뜨시면 맞게 하신겁니다

 

 

궁금하신 점은 편하게 질문 주세요! 감사합니다

 

 

 

반응형

'앱 개발 > Java' 카테고리의 다른 글

안드로이드 토글 버튼 on/off (아이폰 스타일)  (1) 2022.06.07
안드로이드 레이아웃 백그라운드 배경색 설정(벡터 드로어블 이용)  (0) 2022.04.05
[안드로이드] 서버에 데이터 요청 및 응답 (소켓 통신)  (0) 2022.03.29
[안드로이드] DB insert, select, delete 문 사용법 (간단한 예제 공유)  (0) 2022.03.25
[안드로이드] 요일별 toggle button 만들기 - fragment + 해당 요일 가져오기  (0) 2022.03.17
'앱 개발/Java' 카테고리의 다른 글
  • 안드로이드 토글 버튼 on/off (아이폰 스타일)
  • 안드로이드 레이아웃 백그라운드 배경색 설정(벡터 드로어블 이용)
  • [안드로이드] 서버에 데이터 요청 및 응답 (소켓 통신)
  • [안드로이드] DB insert, select, delete 문 사용법 (간단한 예제 공유)
맨땅
맨땅
다른 개발자분들에게 도움이 되었으면 좋겠습니다
  • 맨땅
    맨땅에 코딩
    맨땅
  • 전체
    오늘
    어제
    • 분류 전체보기 (48)
      • 프로그래밍 지식 (1)
      • 즐거운 웹 개발 (7)
        • Setting (3)
        • 프로그래밍 (1)
        • HTML, CSS (1)
      • 앱 개발 (29)
        • Java (26)
        • Kotlin (0)
        • Setting (2)
        • 프로그래밍 (0)
      • AI (1)
        • Setting2 (0)
        • 프로그래밍 (0)
        • 크롤링 (1)
      • DB (9)
      • ---------------------------.. (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
맨땅
[안드로이드] 웹 서버에 데이터 요청 (Open API 활용)
상단으로

티스토리툴바