List< Overlay > overlays = mv.getOverlays();
이 문장이 null값이 들어옵니다. 왜 그런거죠?
mv.setStreetView(true);
mv.setTraffic(true);
GeoPoint center = mv.getMapCenter();
int latSpan = mv.getLatitudeSpan();
int longSpan = mv.getLongitudeSpan();
// 줌 콘트롤과 화면에 위에 고정
int y = 50;
int x = 100;
MapView.LayoutParams lp;
lp = new MapView.LayoutParams( MapView.LayoutParams.WRAP_CONTENT,
MapView.LayoutParams.WRAP_CONTENT, x, y,
MapView.LayoutParams.TOP_LEFT);
View zoomControls = mv.getZoomControls();
mapController = mv.getController();
mv.addView( zoomControls, lp );
mv.displayZoomControls(true);
mapController.setZoom(15);
str = "서울 강남구 역삼동 708-16 ";
pd = ProgressDialog.show( Main.this, "데이터 받아오는중...", "잠시만 기다려주세요!", true,
false);
Thread t = new Thread( null, geo, "geocoder" );
t.start();
이렇게 되거든요
저 쓰레드안에서는 GeoCoder로 한글 주소를 좌표로 받아오는 쓰레드입니다.
private Runnable geo = new Runnable() {
public void run() {
try {
Geocoder mGeoCoder = new Geocoder(getApplicationContext(), Locale.KOREA);
addrs = mGeoCoder.getFromLocationName( str, 1);
if( addrs.size() == 0 ) {
}
Log.d( "addr", addrs.size() + "" );
// 위도/경도 구하기
lat = addrs.get(0).getLatitude()*1E6;
lng = addrs.get(0).getLongitude()*1E6;
handler.post( GUI );
} catch( Exception e ) {}
}
};
private Runnable GUI = new Runnable() {
public void run() {
point = new GeoPoint( lat.intValue(), lng.intValue() );
mapController.setCenter(point);
mapController.animateTo( point );
DesOverlay desOverlay = new DesOverlay();
List< Overlay > overlays = mv.getOverlays();
overlays.clear();
overlays.add( desOverlay );
mv.postInvalidate();
pd.dismiss();
}
};
}
그 다음 코드입니다. 이렇게 하면 널값이 들어가는데 오버레이에요 왜 그런지 모르겠습니다.
근데 이걸 쓰레드에서 하지 않고 메인에서 하면 잘 되지만 지오코더는 쓰레드에서 하라고 책에 나와있어서..
왜 쓰레드안에선 널값이 들어가는거죠?