안드로이드 개발 질문/답변
(글 수 45,052)
package com.google.android;
import java.util.List;
import com.google.android.maps.GeoPoint; import com.google.android.maps.MapActivity; import com.google.android.maps.MapController; import com.google.android.maps.MapView; import com.google.android.maps.Overlay; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Point; import android.os.Bundle;
public class GoogleMap extends MapActivity {
MapView mapView;
MapController mc;
GeoPoint p;
MapOverlay mapOverlay;
Point screenPts;
Bitmap bmp;
List<Overlay> listOfOverlays;
class MapOverlay extends com.google.android.maps.Overlay
{
@Override
public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when)
{
super.draw(canvas, mapView, shadow);
//---translate the GeoPoint to screen pixels---
screenPts = new Point();
mapView.getProjection().toPixels(p, screenPts);
//---add the marker---
bmp = BitmapFactory.decodeResource(
getResources(), R.drawable.icon);
canvas.drawBitmap(bmp, screenPts.x, screenPts.y-50, null);
return true;
}
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//mc.animateTo(p);
//mc.setZoom(17);
mapOverlay = new MapOverlay();
listOfOverlays = mapView.getOverlays();
listOfOverlays.clear();
listOfOverlays.add(mapOverlay);
//mapView = (MapView)findViewById(R.id.map_view);
mapView.invalidate();
}
protected boolean isRouteDisplayed(){
return false;
}
}소스는 위와 같고, 이미 구글맵을 띄우는 테스트는 끝났습니다.
정상적으로 구글맵이 뜨는데 마커 추가하는 소스를 넣었더니 에러가 나네요.
02-10 09:14:03.598: ERROR/AndroidRuntime(829): at dalvik.system.NativeStart.main(Native Method)
02-10 09:14:03.598: ERROR/AndroidRuntime(829): Caused by: java.lang.NullPointerException
02-10 09:14:03.598: ERROR/AndroidRuntime(829): at com.google.android.GoogleMap.onCreate(GoogleMap.java:51)
이런 에러입니다.
널포인트 예외가 자꾸 발생하는데, 이유를 잘 모르겠네요.




GoogleMap.java 의 51번째 라인에서 널포인터 에러가 난 것인데..
아마 listOfOverlays = mapView.getOverlays(); 이 부분인듯 싶네요...
mapView에 MapView 객체를 만들어 주시던지...
아랫쪽에 주석처리된
//mapView = (MapView)findViewById(R.id.map_view);
위의 주석을 제거해서 setContentView(); 다음 라인에 두시면 될듯 하네요..