gpt4 book ai didi

Android map NullPointerException ItemizedOverlay

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:42:53 26 4
gpt4 key购买 nike

这根本没有引用我代码中的任何地方。我该如何深入了解它?

java.lang.NullPointerException
at com.google.android.maps.OverlayBundle.draw(OverlayBundle.java:42)
at com.google.android.maps.MapView.onDraw(MapView.java:494)
at android.view.View.draw(View.java:6739)
at android.view.ViewGroup.drawChild(ViewGroup.java:1648)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1375)
at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1375)
at android.view.View.draw(View.java:6742)
at android.widget.FrameLayout.draw(FrameLayout.java:352)
at android.view.ViewGroup.drawChild(ViewGroup.java:1648)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1375)
at android.view.View.draw(View.java:6742)
at android.widget.FrameLayout.draw(FrameLayout.java:352)
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1872)
at android.view.ViewRoot.draw(ViewRoot.java:1422)
at android.view.ViewRoot.performTraversals(ViewRoot.java:1167)
at android.view.ViewRoot.handleMessage(ViewRoot.java:1744)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:144)
at android.app.ActivityThread.main(ActivityThread.java:4937)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)

这里是ItemizedOverlay的draw方法

public void draw(Canvas canvas, MapView mapView, boolean shadow) {

try {
super.draw(canvas, mapView, false);

if (getMainOverlayArray().size() != 0){

pfOverlayItem tempOver = null;
for (int i = 0; i < getMainOverlayArray().size(); i++) {

tempOver = getMainOverlayArray().get(i);

boolean isMatch = false;

if (tempOver.getTitle().equals(selectedName))
{
isMatch = true;
}

if (isMatch){

Projection projection = mapView.getProjection();
Point point = new Point();
projection.toPixels(tempOver.getPoint(), point);

Paint background = new Paint();
background.setColor(Color.WHITE);
background.setAlpha(150);
RectF rect = new RectF();
rect.set(point.x - 55, point.y +15,
point.x + 100, point.y + 65);
canvas.drawRoundRect(rect, 5, 5, background);


Paint text = new Paint();
text.setAntiAlias(true);
text.setColor(Color.BLUE);
text.setTextSize(14);
text.setTypeface(Typeface.MONOSPACE);

canvas.drawText(tempOver.getTitle() , point.x -50 , point.y + 30, text);
canvas.drawText(tempOver.getTypeTextOut(), point.x -50 , point.y + 45, text);
canvas.drawText(tempOver.getdestination(), point.x -50 , point.y + 60, text);
}
}
}
}catch (Exception e){
Log.e("Error", "Problem drawing view", e);
e.printStackTrace();
}
}

我现在打印出堆栈跟踪,没有区别! :-(

有没有人有任何想法可以帮助查明这个问题?

编辑 - 最新代码 28/11 全类

    private class SitesOverlay extends ItemizedOverlay<pfOverlayItem> {
private List<pfOverlayItem> items = new ArrayList<pfOverlayItem>();

private PopupPanel panel=new PopupPanel(R.layout.popup);
private MapLocation selectedMapLocation;
private static final int CIRCLERADIUS = 2;
private ArrayList<pfOverlayItem> mOverlays = new ArrayList<pfOverlayItem>();



public SitesOverlay() {

super(null);
//super(boundCenter(defaultMarker));
//items = getMainOverlayArray();
//items = mOverlays;
populate();

}



public void finishedLoading(){

populate();

}

@Override
protected pfOverlayItem createItem(int i) {
// Log.i("CREATE","MARKER");
return (items.get(i));

}

public void addItem(OverlayItem overlay) {
overlay.setMarker(boundCenter(overlay.getMarker(0)));
items.add((pfOverlayItem) overlay);
//populate();
}

public void clearItems(){
runOnUiThread(new Runnable() {
public void run() {
items.clear();
myMapView.invalidate();
}
});


}

public void clear() {
mOverlays.clear();
myMapView.removeAllViews();
//numItems = 0;
// Workaround for another bug with this class:
// http://groups.google.com/group/android-developers/browse_thread/thread/38b11314e34714c3
setLastFocusedIndex(-1);
populate();
}

@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
super.draw(canvas, mapView, false);

try {


if (getMainOverlayArray().size() != 0){

pfOverlayItem tempOver = null;
for (int i = 0; i < getMainOverlayArray().size(); i++) {

tempOver = getMainOverlayArray().get(i);

boolean isMatch = false;

//Log.i("Selected Name",selectedName);

if (tempOver.getTitle().equals(selectedName))
{
isMatch = true;
}

if (isMatch){

Projection projection = mapView.getProjection();
Point point = new Point();
projection.toPixels(tempOver.getPoint(), point);

Paint background = new Paint();
background.setColor(Color.WHITE);
background.setAlpha(150);
RectF rect = new RectF();
rect.set(point.x - 50, point.y +15,
point.x + 90, point.y + 50);
canvas.drawRoundRect(rect, 5, 5, background);


Paint text = new Paint();
text.setAntiAlias(true);
text.setColor(Color.BLUE);
text.setTextSize(14);
text.setTypeface(Typeface.MONOSPACE);

//canvas.drawRoundRect(rect, 2, 2, background);
canvas.drawText(tempOver.getTitle() + " " + tempOver.getcallsign(), point.x -50 , point.y + 30, text);
canvas.drawText(tempOver.getdestination() + " " + tempOver.getdraft(), point.x -50 , point.y + 45, text);
}
}
}
}catch (Exception e){
Log.e("Error", "Problem drawing view", e);
e.printStackTrace();

}
}

@Override
protected boolean onTap(int i) {

pfOverlayItem item = getItem(i);

if (selectedName.equals(item.getTitle())){

//Toast.makeText(PlaneFinderMain.this, "SECOND MOFO PRESS", 3000).show();
try{
Intent myIntent = new Intent(PlaneFinderMain.this, DetailActivity.class);
myIntent.putExtra( "int", i);
myIntent.putExtra( "string", selectedName );
PlaneFinderMain.this.startActivity(myIntent);
}catch (Exception e){
Log.e("Error", "Cannot launch", e);
}
}

currentadshex = item.getmmsi();
new GetRouteTask(item.getmmsi()).execute();

selectedItem = i;
selectedName = item.getTitle();
selectedPlanePoint = item.getPoint();

GeoPoint geo=item.getPoint();
Point pt=myMapView.getProjection().toPixels(geo, null);

View view=panel.getView();

((TextView)view.findViewById(R.id.reg)).setText(item.getTitle());
((TextView)view.findViewById(R.id.flightno)).setText(item.getcallsign());
((TextView)view.findViewById(R.id.route)).setText(item.getdestination());
((TextView)view.findViewById(R.id.height)).setText(item.getdraft());

return (true);
}

@Override
public boolean onTouchEvent(MotionEvent event, MapView mapView) {

if (event.getAction() == MotionEvent.ACTION_DOWN){

if (selectedPlanePoint != null){
Projection projection = mapView.getProjection();
Point point = new Point();
projection.toPixels(selectedPlanePoint, point);

Point pointHit = new Point();
pointHit.x=(int)event.getX();
pointHit.y=(int)event.getY();

if ((point.x - pointHit.x) >-100 && (point.x - pointHit.x) <70 && (point.y - pointHit.y) < -25 && (point.y - pointHit.y) > -95){

try{
Intent myIntent = new Intent(PlaneFinderMain.this, DetailActivity.class);

myIntent.putExtra( "int", selectedItem);
myIntent.putExtra( "string", selectedName );
PlaneFinderMain.this.startActivity(myIntent);

}catch (Exception e){
Log.e("Error", "Cannot launch", e);
}

}else{

}


}


}



return false;


}



@Override
public int size() {
return (items.size());
}

public void addOverlay(OverlayItem o){
setLastFocusedIndex(-1);
populate();
}



}

最佳答案

实际上问题不在于您的 ItemizedOverlay 的实现,而在于您的 MapActivity 的实现。从类似的堆栈跟踪中可以看出 here在第 42 行,OverlayBundle 正在调用 Overlay 的 draw() 方法。这指向您在某处添加到 mapView 的空叠加层。

一些有用的提示:你绝对应该通过取消注释你已经拥有的第一行代码来将一个 drawable 传递给你的 super 构造函数(用于 HitTest ):

     public SitesOverlay() {

//super(null);
super(boundCenter(defaultMarker));
//items = getMainOverlayArray();
//items = mOverlays;
populate();

}

并且可能不会在您的 draw() 方法中调用 super.draw()。

    @Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
// why do you do this if you paint it yourself later on.
super.draw(canvas, mapView, false

很可能您实际上必须同时执行这两项操作。

编辑: 想一想,您绝对应该将可绘制对象传递给您的 super 构造函数,因为它用于 HitTest 。修改了上面的文本以反射(reflect)这一点。

关于Android map NullPointerException ItemizedOverlay,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4187012/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com