SQLite 에서 꺼내고 로그가 나온느것 까지는 확인했습니다.
그런데 좌표값만 넣는 부분에 갔다가 놓으면 계속 에러가 나네요..
좌표는 어떻게 집어넣어야 하는지도 잘 모르겠습니다.
어떻게 해야 해결할수 있을까요?
고수님들 한수 부탁드립니다.;;
SQlite Helper 액티비티
public ArrayList<String> getLib ()
{
ArrayList<String> ar = new ArrayList<String>();
Cursor c = myDataBase.rawQuery("select * from books", null);
while (c.moveToNext()) {
String name = c.getString(1);
String address = c.getString(2);
String phonenum = c.getString(3);
String blog = c.getString(4);
String rss = c.getString(5);
String latitude = c.getString(6);
String longitude = c.getString(7);
String gimgisa = c.getString(8);
String bus = c.getString(9);
String currsit = c.getString(10);
Log.d("t",name);
Log.d("t",address);
Log.d("t",phonenum);
Log.d("t",blog);
Log.d("t",rss);
Log.d("t",latitude);
Log.d("t",longitude);
Log.d("t",gimgisa);
Log.d("t",bus);
Log.d("t",currsit);
ar.add(name);
ar.add(address);
ar.add(phonenum);
ar.add(blog);
ar.add(rss);
ar.add(latitude);
ar.add(longitude);
ar.add(gimgisa);
ar.add(bus);
ar.add(currsit);
}
return ar;
}
맵뷰가 나오는 액티비티
dbhelper = new DBAccess(this);
try {
dbhelper.createDataBase();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
dbhelper.openDataBase();
mapView = (MapView) findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);
mapOverlays = mapView.getOverlays();
// first overlay
drawable = getResources().getDrawable(R.drawable.marker);
itemizedOverlay = new MyItemizedOverlay(drawable, mapView);
ArrayList<String> ar = dbhelper.getLib();
String[] a = ar.toArray(new String[0]);
String[] b = ar.toArray(new String[1]);
String[] c = ar.toArray(new String[2]);
String[] d = ar.toArray(new String[3]);
String[] e = ar.toArray(new String[4]);
String[] f = ar.toArray(new String[5]);
String[] g = ar.toArray(new String[6]);
String[] h = ar.toArray(new String[7]);
String[] k = ar.toArray(new String[8]);
String[] j = ar.toArray(new String[9]);
int num=ar.size();
for(int cnt=0; cnt<num; cnt++){
String str=ar.get(cnt);
System.out.println(str);
GeoPoint point1 = new GeoPoint((int)(Integer.parseInt(g) *1E6),(int)(-0.086623*1E6));
OverlayItem overlayItem1 = new OverlayItem(point1, ar.get(1),
ar.get(2));
itemizedOverlay.addOverlay(overlayItem1);
mapOverlays.add(itemizedOverlay);
}
죄송합니다 제가 너무 마음만 앞서서 했나보군요..
님의 말씀을 듣고
소스를 좀 수정했습니다.
DBAccess..java
public ArrayList<String> getAddress() {
ArrayList<String> addressArr = new ArrayList<String>();
Cursor c = myDataBase.rawQuery("select * from books", null);
while (c.moveToNext()) {
String address = c.getString(2);
Log.d("t",address);
addressArr.add(address);
}
return addressArr;
}
public ArrayList<String> getPhoneNum() {
ArrayList<String> phoneArr = new ArrayList<String>();
Cursor c = myDataBase.rawQuery("select * from books", null);
while (c.moveToNext()) {
String phonenum = c.getString(3);
Log.d("t",phonenum);
phoneArr.add(phonenum);
}
return phoneArr;
}
public ArrayList<String> getBlog() {
ArrayList<String> blogArr = new ArrayList<String>();
Cursor c = myDataBase.rawQuery("select * from books", null);
while (c.moveToNext()) {
String blog = c.getString(4);
Log.d("t",blog);
blogArr.add(blog);
}
return blogArr ;
}
public ArrayList<String> getRss() {
ArrayList<String> rssArr = new ArrayList<String>();
Cursor c = myDataBase.rawQuery("select * from books", null);
while (c.moveToNext()) {
String rss = c.getString(5);
Log.d("t",rss);
rssArr.add(rss);
}
return rssArr;
}
public ArrayList<String> getLat() {
ArrayList<String> latArr = new ArrayList<String>();
Cursor c = myDataBase.rawQuery("select * from books", null);
while (c.moveToNext()) {
String latitude = c.getString(6);
Log.d("t",latitude);
latArr.add(latitude);
}
return latArr;
}
이런식으로 반복해두었습니다.
그리고 map.java
drawable = getResources().getDrawable(R.drawable.marker);
itemizedOverlay = new MyItemizedOverlay(drawable, mapView);
ArrayList<String> nameArr = dbhelper.getName();
ArrayList<String> addressArr = dbhelper.getAddress();
ArrayList<String> phoneNumArr = dbhelper.getPhoneNum();
ArrayList<String> blogArr = dbhelper.getBlog();
ArrayList<String> rssArr = dbhelper.getRss();
ArrayList<String> latitudeArr = dbhelper.getLat();
ArrayList<String> longitudeArr = dbhelper.getLng();
ArrayList<String> gimgisaArr = dbhelper.getGimgisa();
ArrayList<String> busArr = dbhelper.getBus();
ArrayList<String> currSitArr = dbhelper.getCurrSit();
int num=nameArr.size();
for(int cnt=0; cnt<num; cnt++){
String str=nameArr.get(cnt);
System.out.println(str);
GeoPoint point1 = new GeoPoint((int)(Integer.parseInt(latitudeArr.get(1))*1E6),(int)(Integer.parseInt(longitudeArr.get(1))*1E6));
OverlayItem overlayItem1 = new OverlayItem(point1,nameArr.get(1),
addressArr.get(1));
itemizedOverlay.addOverlay(overlayItem1);
mapOverlays.add(itemizedOverlay);
}
는 이런식으로 했더니 캡춰한 화면과 같은 익셉션이 뜨더군요.
(int)(Integer.parseInt(longitudeArr.get(1))*1E6));
이부분에서 에러가 나는것 같은데 어느부분에서 정확히 해야 할지 감이 안오는군요..;;
답변주셔서 감사합니다.
한번만 더 답변주시면 감사하겠습니다.
예외를 보시면 unable to parse xxx as integer 이라고 나와있죠? 숫자는 맞게 들어간 것 같습니다만, double 또는 float 형태로 읽어 들여야 하겠네요. 그러면 Float.parseFloat() 또는 Double.parseDouble() 메소드를 사용하면 되겠군요.
조금 더 낫게 바꾼다면, getLat() 과 getLng() 메소드에서 c.getString() 대신 getFloat() 또는 getDouble() 메소드를 사용하고, ArrayList<Float> 또는 ArrayList<Double> 값을 리턴하도록 하면 편리하겠군요.
물론 아직 db 에서 가져온 하나의 행에 대응하는 클래스를 사용하는 방법이 여전히 훨씬 낫습니다만.
2) getLib() 메소드에서 각 컬럼의 값을 여러 행에 걸쳐 하나의 배열에 넣고 있네요. 하나의 book 행을 나타내는 클래스를 정의하고, 클래스의 내용을 채운다음, 클래스를 ArrayList에 추가하세요.
3) getLib() 에서 받아온 값을 사용할 때도 a부터 j까지 변수 만들지 마시고, 반복문으로 book 을 나타내는 클래스 하나씩 받아와서 값을 사용하세요.
지금처럼 코드 작성하시면 본인도 못알아봅니다.