관리 메뉴

나만을 위한 블로그

[Android] 다음 우편번호 API 사용하기 본문

Android

[Android] 다음 우편번호 API 사용하기

참깨빵위에참깨빵_ 2020. 6. 23. 21:01
728x90
반응형

※ 이 글은 개인 서버에 파일을 업로드한 후 작동시키는 예제다. 개인 서버에 파일을 업로드하지 않고서는 시도해보지 않아서 되는지 안되는지 모른다.

 

업데이트 내역)

21.10.16 - daum.html의 <body> 태그 밑 HELLO DAUM 글자를 지웠습니다. 바로 아래에 있는 파일을 다운로드받으시면 되며, 만약 해당 파일이 작동하지 않을 경우 더 밑에 있는 daum.html 파일을 다운받아 사용해 주세요.

daum.html
0.01MB

 

예제를 찾으면 좀 나오긴 하는데 실행하면 무슨 팝업을 차단해제하라고 한다.

기본 브라우저가 크롬이라 크롬에 들어가서 팝업 해제를 취소했는데도 계속 나왔다.

그래서 여기저기서 검색하다 하나 발견해서 기록용으로 쓴다.

 

그 전에 이 파일을 다운받는다.

 

daum.html
0.01MB

그리고 다음 주소 API를 넣을 프로젝트에 assets 폴더를 하나 만들고 그 안에 daum.html 파일을 집어넣는다.

assets 폴더에 이 파일을 넣을 때는 안드로이드 스튜디오를 켠 상태에서 넣으면 안되고 파일 탐색기를 열어 해당 프로젝트의 폴더로 타고타고 들어가서 assets 폴더 안에 직접 넣어줘야 한다. 그리고 sync를 맞춰줘야 한다.

 

그리고 WebViewActivity라는 액티비티를 하나 만든다. 이제 아래 코드 복붙 ㄱㄱ

WebViewActivity의 xml과 자바 파일 코드 먼저 올린다.

 

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    tools:context=".WebViewActivity">

    <WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true" />

</androidx.constraintlayout.widget.ConstraintLayout>
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.webkit.JavascriptInterface;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class WebViewActivity extends AppCompatActivity {

    private WebView browser;

    class MyJavaScriptInterface
    {
        @JavascriptInterface
        @SuppressWarnings("unused")
        public void processDATA(String data) {
            Bundle extra = new Bundle();
            Intent intent = new Intent();
            extra.putString("data", data);
            intent.putExtras(extra);
            setResult(RESULT_OK, intent);
            finish();
        }
    }

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

        browser = (WebView) findViewById(R.id.webView);
        browser.getSettings().setJavaScriptEnabled(true);
        browser.addJavascriptInterface(new MyJavaScriptInterface(), "Android");

        browser.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageFinished(WebView view, String url) {
                browser.loadUrl("javascript:sample2_execDaumPostcode();");
            }
        });

        browser.loadUrl("http://서버주소/daum.html");
    }
}

 

자신의 서버주소에 위에서 다운받은 daum.html을 넣어준다.

넣는 법은 파일질라 같은 툴을 써서 서버에 접속한 다음 웹루트 디렉토리에 두기만 하면 된다.

다음은 MainActivity의 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">

    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/input_layout_address"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/et_address"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/hint_address"
            android:inputType="text"
            android:minLines="2" />

    </com.google.android.material.textfield.TextInputLayout>

    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/input_layout_address_detail"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/et_address_detail"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/hint_address_detail"
            android:inputType="text"
            android:minLines="2" />

    </com.google.android.material.textfield.TextInputLayout>

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="@string/msg_search_address" />

</LinearLayout>
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

    private static final int SEARCH_ADDRESS_ACTIVITY = 10000;

    private EditText et_address;

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

        et_address = (EditText) findViewById(R.id.et_address);

        Button btn_search = (Button) findViewById(R.id.button);

        if (btn_search != null) {
            btn_search.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v)
                {
                    Intent i = new Intent(MainActivity.this, WebViewActivity.class);
                    startActivityForResult(i, SEARCH_ADDRESS_ACTIVITY);
                }
            });
        }
    }

    public void onActivityResult(int requestCode, int resultCode, Intent intent)
    {
        super.onActivityResult(requestCode, resultCode, intent);
        switch (requestCode) {
            case SEARCH_ADDRESS_ACTIVITY:
                if (resultCode == RESULT_OK) {
                    String data = intent.getExtras().getString("data");
                    if (data != null) {
                        et_address.setText(data);
                    }
                }
                break;
        }
    }
}

 

아래 코드를 집어넣고 앱을 빌드하면 아래와 같이 작동한다.

 

 

버튼을 누르고 화면을 자세히 보면 HELLO DAUM! 이란 글자가 아주 잠깐 보이는데 이 부분만 HTML 파일에서 지워주면 깔끔하게 작동할 것이다.

 

21.10.16 추가) 위 gif는 HELLO DAUM 글자를 지우지 않고 올린 파일을 사용해 촬영한 것입니다. 새로 올린 파일을 다운받으시면 저 글자는 보이지 않습니다. 만약 작동하지 않을 경우엔 글 상단의 업데이트 내역 부분을 읽어주세요.

반응형
Comments