Android的力量在这个活动我从表使命的纬度和经度在我的数据库密切与GoogleMap的应用

问题描述:

NullPointerException异常,然后我把它们放进地图标记图像:Android的力量在这个活动我从表使命的纬度和经度在我的数据库密切与GoogleMap的应用

我有一个部队密切与空指针异常日志猫...

public class MaptoDo extends MapActivity{ 
MapView mv; 
MapController mc; 
SQLiteDatabase sql; 
Cursor c; 
GeoPoint p; 
double [] lat; 
double[]lon; 
List<Overlay> listOfOverlays; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Intent in =getIntent(); 
     mv=(MapView) findViewById(R.id.mapView); 
     mv.setBuiltInZoomControls(true); 
     mv.setSatellite(true); 
     mv.setTraffic(true); 
     sql=openOrCreateDatabase("db",0,null); 
     c=sql.rawQuery("select * from Mission",null); 
     if(c.getColumnCount()!=0){ 
      int i=0; 
      while(c.moveToNext()!=false){ 
       lat[i]=c.getDouble(3); 
       lon[i]=c.getDouble(4); 
      } 
      } 
     for(int i=0;i<lat.length;i++) 
     { 
      p=new GeoPoint((int)lat[i]*1000000,(int) lon[i]*1000000); 
      mc.animateTo(p); 
      mc.setZoom(8); 
      MapOverlay mapOverlay = new MapOverlay(); 
      listOfOverlays = mv.getOverlays(); 
      listOfOverlays.clear(); 
      listOfOverlays.add(mapOverlay); 
      mv.invalidate(); 

     } 
    } 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
    // TODO Auto-generated method stub 
    MenuItem itIn=menu.add("Zoom in"); 
    itIn.setIcon(R.drawable.in); 
    MenuItem itOut=menu.add("Zoom out"); 
    itOut.setIcon(R.drawable.out); 
    return super.onCreateOptionsMenu(menu); 

    } 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
    // TODO Auto-generated method stub 
    if(item.getTitle()=="Zoom in") 
    { 
     MapController mc=mv.getController(); 
     mc.zoomIn(); 
    } 
    else if(item.getTitle()=="Zoom out") 
    { 
     MapController mc=mv.getController(); 
     mc.zoomOut(); 
    } 


    return super.onOptionsItemSelected(item); 
    } 
@Override 
protected boolean isRouteDisplayed() { 
    // TODO Auto-generated method stub 
    return false; 
} 


public 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); 
     Point screenPts = new Point(); 
     mapView.getProjection().toPixels(p, screenPts); 
     Bitmap bmp = BitmapFactory.decodeResource(
     getResources(), R.drawable.redpushpin); 
     canvas.drawBitmap(bmp, screenPts.x-20, screenPts.y-34, null); 
     return true; 
    } 
    @Override 
    public boolean onTouchEvent(MotionEvent event, MapView mapView) 
    { 
    if (event.getAction() == 1) { 
    GeoPoint p = mapView.getProjection().fromPixels((int) event.getX(),(int) event.getY()); 
    Toast.makeText(getBaseContext(),"Location: "+p.getLatitudeE6()/1E6 + "," + 
    p.getLongitudeE6() /1E6 ,Toast.LENGTH_SHORT).show(); 
    } 
      return false; 

    } 
} 

}

这是logcat中的跟踪:

08-14 00:43:33.068: E/AndroidRuntime(652): FATAL EXCEPTION: main 
    08-14 00:43:33.068: E/AndroidRuntime(652): java.lang.RuntimeException: Unable to start activity ComponentInfo{sarah.android/sarah.android.MaptoDo}: java.lang.NullPointerException 
    08-14 00:43:33.068: E/AndroidRuntime(652): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 
    08-14 00:43:33.068: E/AndroidRuntime(652): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
    08-14 00:43:33.068: E/AndroidRuntime(652): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
    08-14 00:43:33.068: E/AndroidRuntime(652): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
    08-14 00:43:33.068: E/AndroidRuntime(652): at android.os.Handler.dispatchMessage(Handler.java:99) 
    08-14 00:43:33.068: E/AndroidRuntime(652): at android.os.Looper.loop(Looper.java:130) 
    08-14 00:43:33.068: E/AndroidRuntime(652): at android.app.ActivityThread.main(ActivityThread.java:3683) 
    08-14 00:43:33.068: E/AndroidRuntime(652): at java.lang.reflect.Method.invokeNative(Native Method) 
    08-14 00:43:33.068: E/AndroidRuntime(652): at java.lang.reflect.Method.invoke(Method.java:507) 
    08-14 00:43:33.068: E/AndroidRuntime(652): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
    08-14 00:43:33.068: E/AndroidRuntime(652): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
    08-14 00:43:33.068: E/AndroidRuntime(652): at dalvik.system.NativeStart.main(Native Method) 
08-14 00:43:33.068: E/AndroidRuntime(652): Caused by: java.lang.NullPointerException 
08-14 00:43:33.068: E/AndroidRuntime(652):  at sarah.android.MaptoDo.onCreate(MaptoDo.java:40) 
08-14 00:43:33.068: E/AndroidRuntime(652):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
08-14 00:43:33.068: E/AndroidRuntime(652):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
+0

在你的MaptoDo活动中是否有一个叫做addMission的函数?请张贴该函数的代码,因为nullpointerexception被抛出。 – 2012-08-13 21:24:00

+0

@Vishwa Patel我删除了这个方法! – Syamic 2012-08-13 21:41:15

+0

这甚至意味着什么?你在第71行的'MaptoDo'类中调用它,看到LogCat – tolgap 2012-08-13 21:42:03

lat[i]=c.getDouble(3); 
lon[i]=c.getDouble(4); 

它看起来并不像你初始化你的阵列中,只宣称他们在顶部:

double [] lat; 
double [] lon; 

你必须初始化它们如:

double [] lat = new double[5]; 
double [] lon = new double[5]; 

您还需要在对它进行调用之前实例化变量mc。你可以这样实例化:

mc = mv.getController(); 
+0

我做了初始化,但它仍然有一个空指针异常 – Syamic 2012-08-13 22:02:16

+0

我也可以看到你没有实例化你的变量'mc',因此你第一次调用mc(mc.animateTo(p))也会失败,给空指针异常 – 2012-08-13 22:04:47

+0

我不知道如何初始化它也我认为这并不重要,因为我做了另一个应用程序使用地图控制器没有初始化,它运作良好:( – Syamic 2012-08-13 22:09:12