안드로이드 개발 질문/답변
(글 수 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(); 다음 라인에 두시면 될듯 하네요..