0
안녕하세요 저는 항목화된 오버레이를 사용하여지도에 위도와 경도의 배열을 표시하려고합니다. 나는 뒤에 오는 과실을 얻고있다. 문제는 일 수 있었다. 여기에>안드로이드에서 아이템 화 된 오버레이를 사용할 때 Null 포인터
03-18 23:52:06.834: W/dalvikvm(2949): threadid=1: thread exiting with uncaught exception (group=0x40b01428)
03-18 23:52:06.844: E/AndroidRuntime(2949): FATAL EXCEPTION: main
03-18 23:52:06.844: E/AndroidRuntime(2949): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.rahul.besttracker/com.rahul.besttracker.Mapview}: java.lang.NullPointerException
03-18 23:52:06.844: E/AndroidRuntime(2949): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java)
03-18 23:52:06.844: E/AndroidRuntime(2949): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java)
03-18 23:52:06.844: E/AndroidRuntime(2949): at android.app.ActivityThread.access$600(ActivityThread.java)
03-18 23:52:06.844: E/AndroidRuntime(2949): at android.app.ActivityThread$H.handleMessage(ActivityThread.java)
03-18 23:52:06.844: E/AndroidRuntime(2949): at android.os.Handler.dispatchMessage(Handler.java)
03-18 23:52:06.844: E/AndroidRuntime(2949): at android.os.Looper.loop(Looper.java)
03-18 23:52:06.844: E/AndroidRuntime(2949): at android.app.ActivityThread.main(ActivityThread.java)
03-18 23:52:06.844: E/AndroidRuntime(2949): at java.lang.reflect.Method.invokeNative(Native Method)
03-18 23:52:06.844: E/AndroidRuntime(2949): at java.lang.reflect.Method.invoke(Method.java)
03-18 23:52:06.844: E/AndroidRuntime(2949): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
03-18 23:52:06.844: E/AndroidRuntime(2949): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
03-18 23:52:06.844: E/AndroidRuntime(2949): at dalvik.system.NativeStart.main(Native Method)
03-18 23:52:06.844: E/AndroidRuntime(2949): Caused by: java.lang.NullPointerException
03-18 23:52:06.844: E/AndroidRuntime(2949): at com.google.android.maps.ItemizedOverlay.populate(ItemizedOverlay.java)
03-18 23:52:06.844: E/AndroidRuntime(2949): at com.rahul.besttracker.HelloItemizedOverlay.addOverlay(HelloItemizedOverlay.java:37)
03-18 23:52:06.844: E/AndroidRuntime(2949): at com.rahul.besttracker.Mapview.onCreate(Mapview.java:56)
03-18 23:52:06.844: E/AndroidRuntime(2949): at android.app.Activity.performCreate(Activity.java)
03-18 23:52:06.844: E/AndroidRuntime(2949): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java)
03-18 23:52:06.844: E/AndroidRuntime(2949): ... 12 more
03-18 23:52:07.935: D/Process(2949): killProcess, pid=2949
이 경우에서 onCreate 루프 내지도보기 클래스
package com.rahul.besttracker;
import java.util.ArrayList;
import java.util.List;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
public class Mapview extends MapActivity {
MapView map;
ArrayList<String> mArrayList;
double[] Lat;
double[] Lon;
String stops[];
int latarr[], lonarr[];
OverlayItem overlayitem;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.maps);
map = (MapView) findViewById(R.id.Map);
// map.setBuiltInZoomControls(true);
// setContentView(R.layout.maps);
Bundle gotBasket = getIntent().getExtras();
mArrayList = gotBasket.getStringArrayList("stops");
Lat = gotBasket.getDoubleArray("Lat");
Lon = gotBasket.getDoubleArray("Lon");
System.out.println("SIZE+++" + Lat.length + " " + Lon.length);
for (int i = 0; i < mArrayList.size(); i++) {
System.out.println(" \n" + Lat[i] + "\t" + Lon[i]);
}
// stops=(String[]) mArrayList.toArray();
List<Overlay> mapOverlays = map.getOverlays();
Drawable drawable = this.getResources().getDrawable(
R.drawable.mark_blue);
HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(
drawable, this);
for (int i = 0; i < mArrayList.size(); i++) {
if (Lat[i] > 0 && Lon[i] > 0) {
GeoPoint point = new GeoPoint((int) (Lat[i] * 1E6),
(int) (Lon[i] * 1E6));
overlayitem = new OverlayItem(point, mArrayList.get(i), null);
}
itemizedoverlay.addOverlay(overlayitem);
mapOverlays.add(itemizedoverlay);
}
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
설명해 주실 수 있습니다 .. 진술을받지 못했습니다 .. 죄송합니다 .... –
YOUR for 루프 onCreate는 if 문 내부의 변수 overlayitem에 대한 유효한 값만 설정하고 있습니다. 그것의 바깥에있는 if 문. 조건이 거짓이면 overlayitem이 null임을 의미합니다. 그러나 당신은 여전히 이것을 맵에 표시하는 것으로 추가하고 있습니다. 결과적으로 널 포인터 오류가 발생합니다. –
좋아요. 많이 부탁드립니다. –