안녕하세요~~도저히 해결이 안돼서 이렇게 올립니다..
맵실행시 마커클릭하고 이것저것 조금만해주면...에러가 납니다...
아무래도 updateOverlayㅇㅔ서 에러가 나는듯해서 이렇게 코드를 첨부하구요
음...에러는 java.lang.ArrayIndexOutOfBoundsException 이렇게 납니다...
어디서나는지 참..;;아...음..나름 클리어랑..그런거 한거같은데 ..고수님들의 조언부탁드립니다.
이러다 죽겠어요 ㅠㅠ
public void updateOverlay(Location aLocation){
listOfOverlays = mMapView.getOverlays();
InterestingLocations overlayItem = null;
InterestingLocations overlayItem1 = null;
if(listOfOverlays.size()>0)
{
overlayItem = (InterestingLocations) listOfOverlays.get(0);
overlayItem1 = (InterestingLocations) listOfOverlays.get(1);
}
overlayItem.locations.clear();
overlayItem1.locations.clear();
listOfOverlays.clear();
mFunPlacesMain.setMyPoint(mMarkerMain, 0);
mMapView.getOverlays().add(mFunPlacesMain);
// populate();
if(mIsStoreSearched==false)
{
if(mMapView.getZoomLevel() >= ZOOMLEVEL)
{
pre.mMyDB.showCarcenter( aLocation );
mFunPlacesOther.setMarker(mMarkerOther, 0);
mMapView.getOverlays().add(mFunPlacesOther);
}else{
Toast.makeText(this,"안녕하세요.", Toast.LENGTH_SHORT).show();
}//else
}else{
pre.mMyDB.showCarcenter( mStoreID );
mFunPlacesOther.setMarker(mMarkerOther, 0);
mMapView.getOverlays().add(mFunPlacesOther);
// populate();
}
mMapView.postInvalidate();
}
위의코드로 마커를 찍는데요....음... 아래는 ItemizedOverlay 를 상속받은 클래스에서 마커add해주는함수요..
public void setMyPoint(Drawable marker, int flag)
{
GeoPoint pointMyLocation = new GeoPoint((int)(mMyLocation.getLatitude()*1E6),(int)(mMyLocation.getLongitude()* 1E6));//인천(현재좌표)
locations.add(new OverlayItem( pointMyLocation , "mypoint", null ));
populate();
}
public void setMarker(Drawable marker, int flag){
for(int i=0;i<mydb.mMapCarLatitude.size();i++)
{
locations.add(new OverlayItem((new GeoPoint((int)(Double.parseDouble(mydb.mMapCarLatitude.get(i).toString())*1E6),
(int)(Double.parseDouble(mydb.mMapCarLongitude.get(i).toString())* 1E6))), mydb.mMapCarName.get(i)+"", null ));
}
populate();
}
살려줘요 ♥
배열이 5개인데 6번째로 접근을 하려고 할때 생기기도 하는데여
선언을 안해준 경우에도 발생해여
즉
Strign str[];
for (int i=0; i<10; i++) {
str[i] = i;
}
이렇게 해줄 경우 str의 크기를 지정해주지 않았기 때문에도 생기기도 하니
배열 관련된 모든 부분을 체크해보세여
그부분을 빼니까..음...에러는 않나는데 지워지는 부분이 ..없으니까 느려지다가 죽네요
말씀대로 지워지는부분이 바껴야하는데..흠..어떻게 바꿔야할지를 모르겟네요
이것저것해봐두 ..;;ㅠㅠ help me
if(listOfOverlays.size()>0)
{
for(int i=0, overlaysize=listOfOverlays.size(); i < overlaysize; i++){
if(i == 0){
overlayItem = (InterestingLocations) listOfOverlays.get(0);
overlayItem.locations.clear();
}
if(i == 1){
overlayItem1 = (InterestingLocations) listOfOverlays.get(1);
overlayItem1.locations.clear();
}
}
}
listOfOverlays.clear();
ㅎㅎ 테리님 정말감사해요~~~^^
근데...에러가 거기서 나는게 아닌거같아요 ..테리님이 주시소스는 완벽하신듯...ㅎㅎ
음...ㅇ_ㅇ;
왜 에러가날까.................................ㅠㅠ
그러면 에러 위치가 다른 곳인가 보군요..
그럼 Log를 부분 부분을 넣어보면서 어느 시점에서 발생하는지 파악해야 할듯 싶네요..
내용상에서 그 예외가 발생할만한 곳이 거기일것 같았는데.
왜냐면 인덱스를 직접 지정하면서 찾는곳이 거기뿐이어서..
if(listOfOverlays.size()>0)
{
for(int i = 0; i< listOfOverlays.size();i++)
{
((InterestingLocations)listOfOverlays.get(i)).locations.clear();
}
}
listOfOverlays.clear();
그부분은이런식으로 바껐습니다.
에러는 여전하구요.. 특정한패턴에서 에러가나는데... 음..콘솔창에는 ArrayIndexOutOf어쩌고..라고뜨고
디버그했을때는..음..에효...ㅠ_ㅠ
MapView.onTouchEvent(MotionEvent) line: 628
ViewRoot.handleMessage(Message) line: 1740
InvocationTargetException.<init>(Throwable) line: 50
ZygoteInit$MethodAndArgsCaller.run() line: 863
ThreadGroup.uncaughtException(Thread, Throwable) line: 883
이런식으로 순차적으로 발생하더라구요 ..;;ㅠㅠ
음...Log는 안썻고 sysout으로 출력을햇는데요.. 음..
on터치 메소드에서 정상적으로 실행되고
리턴후부터..에러가 나더라고요;;
리턴은 false , true , super(on터치어쩌고) 해서 다 해봣는데도 그렇고..요즘참 이거때문에 미치겠습니다 ;;해결은안되고 ;
ㅠㅠ 테리님 감사 ㅠ 5군데 계시판에 올렷는데 역시 안드로이드 펍 ㅋ_ㅋ
있지도 않은 멤버에 접근을 시도하려고 할때 발생합니다..
예를 들자면 listOfOverlays 안에 내용물이 1개만 있는데 listOfOverlays.get(1) 로 접근을 시도하려고 하게 되면 에러가 발생하는거죠..있지도 않는 두번째 멤버를 꺼낼려고 하는거니까요..
제 생각엔..
if(listOfOverlays.size()>0)
{
overlayItem = (InterestingLocations) listOfOverlays.get(0);
overlayItem1 = (InterestingLocations) listOfOverlays.get(1);
}
이 부분이 의심스럽네요..만약 listOfOverlays가 안에 내용물이 2개가 들어있지 않고 1개만 들어있다면 이 부분에서 저 예외상황이 발생할꺼거든요..
listOfOverlays의 size가 2인지를 확인하고 코딩을 접근하시는게 좋을듯 싶습니다..