2012-08-15 185 views
-1

我有一個用於查找用戶當前位置的代碼。當我在android 1.6中運行我的代碼時,我得到了輸出。但是我在android 2.3中運行,我只有錯誤。我的代碼的問題是什麼。Map not working in 2.3

的logcat:

08-15 23:03:39.612: E/AndroidRuntime(403): FATAL EXCEPTION: main 
08-15 23:03:39.612: E/AndroidRuntime(403): java.lang.NullPointerException 
08-15 23:03:39.612: E/AndroidRuntime(403): at com.android.locationspeecher.MyPositionOverlay.draw(MyPositionOverlay.java:25) 
08-15 23:03:39.612: E/AndroidRuntime(403): at com.google.android.maps.Overlay.draw(Overlay.java:179) 
08-15 23:03:39.612: E/AndroidRuntime(403): at com.google.android.maps.OverlayBundle.draw(OverlayBundle.java:45) 
08-15 23:03:39.612: E/AndroidRuntime(403): at com.google.android.maps.MapView.onDraw(MapView.java:530) 
08-15 23:03:39.612: E/AndroidRuntime(403): at android.view.View.draw(View.java:6880) 
08-15 23:03:39.612: E/AndroidRuntime(403): at android.view.ViewGroup.drawChild(ViewGroup.java:1646) 
08-15 23:03:39.612: E/AndroidRuntime(403): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
08-15 23:03:39.612: E/AndroidRuntime(403): at android.view.ViewGroup.drawChild(ViewGroup.java:1644) 
08-15 23:03:39.612: E/AndroidRuntime(403): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
08-15 23:03:39.612: E/AndroidRuntime(403): at android.view.View.draw(View.java:6883) 
08-15 23:03:39.612: E/AndroidRuntime(403): at android.widget.FrameLayout.draw(FrameLayout.java:357) 
08-15 23:03:39.612: E/AndroidRuntime(403): at android.view.ViewGroup.drawChild(ViewGroup.java:1646) 
08-15 23:03:39.612: E/AndroidRuntime(403): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
08-15 23:03:39.612: E/AndroidRuntime(403): at android.view.ViewGroup.drawChild(ViewGroup.java:1644) 
08-15 23:03:39.612: E/AndroidRuntime(403): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
08-15 23:03:39.612: E/AndroidRuntime(403): at android.view.View.draw(View.java:6883) 
08-15 23:03:39.612: E/AndroidRuntime(403): at android.widget.FrameLayout.draw(FrameLayout.java:357) 
08-15 23:03:39.612: E/AndroidRuntime(403): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1862) 
08-15 23:03:39.612: E/AndroidRuntime(403): at android.view.ViewRoot.draw(ViewRoot.java:1522) 
08-15 23:03:39.612: E/AndroidRuntime(403): at android.view.ViewRoot.performTraversals(ViewRoot.java:1258) 
08-15 23:03:39.612: E/AndroidRuntime(403): at android.view.ViewRoot.handleMessage(ViewRoot.java:1859) 
08-15 23:03:39.612: E/AndroidRuntime(403): at android.os.Handler.dispatchMessage(Handler.java:99) 
08-15 23:03:39.612: E/AndroidRuntime(403): at android.os.Looper.loop(Looper.java:130) 
08-15 23:03:39.612: E/AndroidRuntime(403): at android.app.ActivityThread.main(ActivityThread.java:3683) 
08-15 23:03:39.612: E/AndroidRuntime(403): at java.lang.reflect.Method.invokeNative(Native Method) 
08-15 23:03:39.612: E/AndroidRuntime(403): at java.lang.reflect.Method.invoke(Method.java:507) 
08-15 23:03:39.612: E/AndroidRuntime(403): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
08-15 23:03:39.612: E/AndroidRuntime(403): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
08-15 23:03:39.612: E/AndroidRuntime(403): at dalvik.system.NativeStart.main(Native Method) 

這裏我MyPositionOverlay代碼:

public class MyPositionOverlay extends Overlay { 

    Location location; 
    private final int mRadius=5; 

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

     Projection projection=mapView.getProjection(); 

     if(shadow==false){ 
      Double latitude=location.getLatitude()*1E6; 
      Double longitude=location.getLongitude()*1E6; 

      GeoPoint geoPoint; 
      geoPoint=new GeoPoint(latitude.intValue(),longitude.intValue()); 

      Point point=new Point(); 
      projection.toPixels(geoPoint, point); 

      RectF oval=new RectF(point.x - mRadius,point.y - mRadius,point.x + mRadius,point.y + mRadius); 

      Paint paint=new Paint(); 
      paint.setARGB(250, 255, 255, 255); 
      paint.setAntiAlias(true); 
      paint.setFakeBoldText(true); 

      Paint backPaint=new Paint(); 
      backPaint.setARGB(175, 50, 50, 50); 
      backPaint.setAntiAlias(true); 

      RectF backRect=new RectF(point.x + 2 + mRadius, point.y - 3*mRadius,point.x + 65, point.y + mRadius); 

      canvas.drawOval(oval, paint); 
      canvas.drawRoundRect(backRect, 5, 5, backPaint); 
      canvas.drawText("Here I Am", point.x + 2*mRadius, point.y, paint); 
     } 
     super.draw(canvas, mapView, shadow); 


     } 

    @Override 
    public boolean onTap(GeoPoint point,MapView mapView){ 
     return false; 
    } 


public Location getLocation(){ 

    return location; 

} 
public void setLocation(Location location){ 
    this.location=location; 
} 


} 
+0

MyPositionOverlay.draw(MyPositionOverlay.java:25) 發佈這個部分代碼 – nandeesh 2012-08-15 17:39:21

+0

Nandeesh:請檢查... – Ram 2012-08-15 17:51:06

回答

1

你有一個空指針異常。它看起來像你試圖畫的東西是空的。你在特定的分辨率文件夾中有你的繪圖嗎?像drawable-ldpi。

如果是這種情況,2.3模擬器可能會有一個不同的解析配置文件(可能是mdpi)導致drawable爲空。

無論如何,你需要去那行代碼,找出什麼是空的,然後找出原因。