[#2][안드로이드] 다음 우편번호 서비스 API 사용하여 주소 입력받기

다음 우편번호 서비스 API 사용하여 주소 입력받는 방법


다음 우편번호 서비스 상세 설명 : http://postcode.map.daum.net/guide

1. AndroidManifest.xml에서 인터넷 권한 추가
<uses-permission android:name="android.permission.INTERNET" />
cs


2. DaumWebViewActivity.java 생성
package com.example.ghd_t.myapplication;
import android.content.Intent;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.JavascriptInterface;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.widget.TextView;
public class DaumWebViewActivity extends AppCompatActivity {
    private WebView daum_webView;
    private TextView daum_result;
    private Handler handler;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_daum_web_view);
        daum_result = (TextView) findViewById(R.id.daum_result);
        // WebView 초기화
        init_webView();
        // 핸들러를 통한 JavaScript 이벤트 반응
        handler = new Handler();
    }
    public void init_webView() {
        // WebView 설정
        daum_webView = (WebView) findViewById(R.id.daum_webview);
        // JavaScript 허용
        daum_webView.getSettings().setJavaScriptEnabled(true);
        // JavaScript의 window.open 허용
        daum_webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        // JavaScript이벤트에 대응할 함수를 정의 한 클래스를 붙여줌
        daum_webView.addJavascriptInterface(new AndroidBridge(), "TestApp");
        // web client 를 chrome 으로 설정
        daum_webView.setWebChromeClient(new WebChromeClient());
        // webview url load. php 파일 주소
        daum_webView.loadUrl("http://192.168.25.60:80/daum_address.php");
    }
    private class AndroidBridge {
        @JavascriptInterface
        public void setAddress(final String arg1, final String arg2, final String arg3) {
            handler.post(new Runnable() {
                @Override
                public void run() {
                    daum_result.setText(String.format("(%s) %s %s", arg1, arg2, arg3));
                    // WebView를 초기화 하지않으면 재사용할 수 없음
                    init_webView();
                }
            });
        }
    }
}
cs

3. activity_daum_web_view.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="com.example.ghd_t.myapplication.DaumWebViewActivity">
    <WebView
        android:id="@+id/daum_webview"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="4" />
    <TextView
        android:id="@+id/daum_result"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:gravity="center"
        android:text="Result" />
</LinearLayout>
cs

4. php 파일 웹 서버에 등록
** 사용한 웹 서버 : Mongoose free 6.9
<?php
header("Content-Type: text/html; charset=UTF-8");
?>
<script src="http://dmaps.daum.net/map_js_init/postcode.v2.js"></script>
<script>
    new daum.Postcode({
        oncomplete: function(data) {
            if(data.userSelectedType=="R"){
                // userSelectedType : 검색 결과에서 사용자가 선택한 주소의 타입
                // return type : R - roadAddress, J : jibunAddress
                // TestApp 은 안드로이드에서 등록한 이름
                window.TestApp.setAddress(data.zonecode, data.roadAddress, data.buildingName);
            }
            else{
                window.TestApp.setAddress(data.zonecode, data.jibunAddress, data.buildingName);
            }       
        }
    }).open();
</script>
cs


결과물





댓글

  1. 작성자가 댓글을 삭제했습니다.

    답글삭제
  2. val dialogEditText = EditText(this@MainActivity)
    dialogEditText.inputType = InputType.TYPE_CLASS_NUMBER
    val builder = AlertDialog.Builder(this@MainActivity)
    .setView(dialogEditText)
    .setTitle("Title")
    .setPositiveButton("OK") { dialog, id ->
    dialog.dismiss()
    }
    .setNegativeButton("NO") { dialog, id ->
    dialog.dismiss()
    }

    cv_profile.setOnLongClickListener {

    builder.create().show()
    false
    }

    인데요, 계속적으로 java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 이런 오류가 나네요. 도와주실 수 있나요?

    답글삭제
  3. 제가 php 파일을 만들어서 다 등록하고 했는데 웹뷰에 url 등록후에 해보니 php 코드만 나옵니다? 뭐가 문제일까요? 개발자님?

    답글삭제

댓글 쓰기

가장 많이 본 글