마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드스튜디오에서 sqlite파일의 컬럼값을 참조해 마커 표시하는 법(네이버 지도 api 사용)

0 추천

firefox 부가기능의 sqlitemanager를 이용해서 sqlite파일을 생성했습니다.

그건 안드로이드스튜디오에 assets폴더를 만들어서, 거기에 넣어놓은 상태구요.

아 모든 컬럼은 text형식으로 생성되었습니다.

csv파일을 sqlite파일로 변환한거라, text형식으로 할 수 밖에 없더라구요.

테이블은 이런 식으로 생성해놓았구요.

네이버 지도 api 메소드에 addPOIitem 부분을 이용해서 지도에 원하는 위치에 말풍선을 띄우려고 합니다.

그래서 sqlite파일의 num, name, latitude, longitude값만 참조해서 마커를 표시해야 합니다.

말풍선에 띄우는 텍스트값(title)은 sqlite파일의 name컬럼을 참조하고, id 부분은 num를 참조하고, 경도는 longitude, 위도는 latitude값을 참조해야 합니다.

for (int cnt = 0; cnt < 446; cnt++){
            SQLiteDatabase myDB;
            myDB = this.openOrCreateDatabase("kfj.sqlite", MODE_PRIVATE, null);
            Cursor allRCD;

            String sql = "select * from kfj";
            allRCD = myDB.rawQuery(sql, null);

            if (allRCD.moveToNext()) {
                while (allRCD.moveToNext()) {
                    DBsave db = new DBsave();

                    String str_num = allRCD.getString(2);
                    Integer int_num = Integer.parseInt(str_num);
                    String str_name = allRCD.getString(3);
                    String str_latitude = allRCD.getString(6);
                    Double dou_latitude = Double.valueOf(str_latitude);
                    String str_longitude = allRCD.getString(7);
                    Double dou_longitude = Double.valueOf(str_longitude);
                }
            }

            NMapPOIitem item1 = poiData.addPOIitem(dou_longitude, dou_latitude, str_name, markerId, int_num); //POI아이템 설정
            item1.setRightAccessory(true, NMapPOIflagType.CLICKABLE_ARROW); //마커 선택 시 표시되는 말풍선의 오른쪽 아이콘을 설정한다.
            item1.hasRightAccessory(); //마커 선택 시 표시되는 말풍선의 오른쪽 아이콘 설정 여부를 반환한다.
            item1.setRightButton(true); //마커 선택 시 표시되는 말풍선의 오른쪽 버튼을 설정한다.
            item1.showRightButton(); //마커 선택 시 표시되는 말풍선의 오른쪽 버튼 설정 여부를 반환한다.

        }

그래서 소스 구상을 이런 식으로 했는데, 이게 for문이랑 NMapPOIitem item1 이 부분 고쳐야 하겠죠..

데이터가 총 446개가 있어서, 말풍선을 446개나 띄워야 합니다.

item1~item446개까지 저런 식으로 생성해야 되는데, 이걸 또 어떻게 소스로 적어야 할지 모르겠네요.

그리고 저런 식으로 sqlite파일의 컬럼값을 각각 참조해서, 말풍선을 여러 개 띄우고 싶어요..

저런 식으로 선언해놨더니

NMapPOIitem item1 = poiData.addPOIitem(dou_longitude, dou_latitude, str_name, markerId, int_num);

이 부분이 빨간 글씨로 떠버리더라구요..ㅠㅠ

소스를 어떻게 고쳐야 할 지 조언해주시면 감사하겠습니다.

 

참고로 DBSave.java파일에는 getter, setter만 있는데 저기서 활용하진 않았습니다.

package com.example.administrator.kfj1127;

public class DBsave {

    private String division = null;
    private String num = null;
    private String name = null;
    private String address = null;
    private String bike_num = null;
    private String latitude = null;
    private String longitude = null;


    public void setDivision(String division) {
        this.division = division;
    }
    public String getDivision() {
        return division;
    }

    public void setNum(String num) {
        this.num = num;
    }
    public String getNum() {
        return num;
    }

    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }

    public void setAddress(String address) {
        this.address = address;
    }
    public String getAddress() {
        return address;
    }

    public void setBike_num(String bike_num) {
        this.bike_num = bike_num;
    }
    public String getBike_num() {
        return bike_num;
    }

    public void setLatitude(String latitude) {
        this.latitude = latitude;
    }
    public String getLatitude() {
        return latitude;
    }

    public void setLongitude(String longitude) {
        this.longitude = longitude;
    }
    public String getLongitude() {
        return longitude;
    }
}

혹시 모르니 참조용으로만 올려둡니다.

진여울 (300 포인트) 님이 2016년 12월 13일 질문

2개의 답변

0 추천
 
채택된 답변

for (int cnt = 0; cnt < 446; cnt++){

//for문으로 446이라 명시적으로 적어놓으면 나중에 데이터 추가시 다시 빌드하실건가요? 해당부분은 제거하세요

            SQLiteDatabase myDB;

            myDB = this.openOrCreateDatabase("kfj.sqlite", MODE_PRIVATE, null);

            Cursor allRCD;

 

            String sql = "select * from kfj";

            allRCD = myDB.rawQuery(sql, null);

 

            if (allRCD.moveToNext()) {

            //.moveToNext()메소드의 경우 다음줄로 넘어갑니다. 해당 부분은 allRCD != null 체크만 하세요

                while (allRCD.moveToNext()) {

                    DBsave db = new DBsave();

                    //새로 모델객체 생성은 좋지만 액티비티 생성마다 계속 db접속할 건가요? 

                    aplication 클래스에  hashmap()<String, DBsave> 하나 생성하셔서 저장하고 쓰세요

 

                    String str_num = allRCD.getString(2);

                    Integer int_num = Integer.parseInt(str_num);

                    String str_name = allRCD.getString(3);

                    String str_latitude = allRCD.getString(6);

                    Double dou_latitude = Double.valueOf(str_latitude);

                    String str_longitude = allRCD.getString(7);

                    Double dou_longitude = Double.valueOf(str_longitude);

                    (커스텀 어플리케이션 클래스).hashmap.put(str_num , db)

                }

            }

 

            NMapPOIitem item1 = poiData.addPOIitem(dou_longitude, dou_latitude, str_name, markerId, int_num); //POI아이템 설정

            item1.setRightAccessory(true, NMapPOIflagType.CLICKABLE_ARROW); //마커 선택 시 표시되는 말풍선의 오른쪽 아이콘을 설정한다.

            item1.hasRightAccessory(); //마커 선택 시 표시되는 말풍선의 오른쪽 아이콘 설정 여부를 반환한다.

            item1.setRightButton(true); //마커 선택 시 표시되는 말풍선의 오른쪽 버튼을 설정한다.

            item1.showRightButton(); //마커 선택 시 표시되는 말풍선의 오른쪽 버튼 설정 여부를 반환한다.

            //굳이 밖으로 뺄 필요 없이 DB데이터 모델 생성시에 같이 넣는게 좋겠습니다.

            //또한 무거운 작업이므로 AsyncTask를 써서 비동기로 돌리세요

        }

 
 
익명사용자 님이 2016년 12월 13일 답변
진여울님이 2016년 12월 18일 채택됨
0 추천

안녕하세요

개발자 사이트에서 참조해 왔습니다.

생성자

NMapPOIdata(int capacity, NMapPOIitem.ResourceProvider resourceProvider)

전체 POI 아이템의 개수와 NMapResourceProvider를 상속받은 클래스를 인자로 전달한다.

여러개의 말풍선을 만드시고 싶으시면 첫번째 파라메터에 POI 아이템 개수를 넣으시면 됩니다.

그후에 아래처럼 같이 하시면 마커가 생성됩니다.

NMapPOIitem addPOIitem(NGeoPoint point, String title, int markerId, Object tag, int id)

예)

NMapPOIdata poiData = new NMapPOIdata(1, mMapViewerResourceProvider);
poiData.beginPOIdata(1);
poiData.addPOIitem(127.061, 37.51, "Pizza 123-456", markerId, 0);
poiData.endPOIdata();

 

개발자 사이트 문서를 보시면 개발하시는데 도움이 많이됩니다! 수고하세요^^

https://developers.naver.com/docs/map/android

히로시 (10,800 포인트) 님이 2016년 12월 13일 답변
...