2012-08-15 4 views
0
그때 난 내지도에 해당 위치를 지정하려면 내 데이터베이스에 임무라는 테이블의 모든 위치를 얻으려면

... 나는이 코드를 시도했지만 내가이 코드에 대한 도움이 필요 그것은 단지 하나 개의 위치를 ​​보여줍니다 작동하지 않습니다 잘 작동합니까?Google지도에서 dataBase의 여러 위치를 지정하는 방법은 무엇입니까?

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.googlemap); 
     Intent in =getIntent(); 
     mv=(MapView) findViewById(R.id.mapView); 
     mv.setBuiltInZoomControls(true); 
     mv.setSatellite(true); 
     sql=openOrCreateDatabase("db",0,null); 
     c=sql.rawQuery("select * from Mission",null); 
     double [] lat = new double[c.getColumnCount()]; 
     double [] lon = new double[c.getColumnCount()]; 
     if(c.getColumnCount()!=0){ 
      int i=0; 
      int count=c.getColumnCount(); 
      c.moveToFirst(); 
      while(count>0){ 
       lat[i]=c.getDouble(3); 
       lon[i]=c.getDouble(4); 
       i++; 
       count--; 

      } 
      c.close(); 
      } 
     for(int i=0;i<lat.length;i++) 
     { 
      p=new GeoPoint((int)lat[i]*1000000,(int) lon[i]*1000000); 
      mc = mv.getController(); 
      mc.animateTo(p); 
      mc.setZoom(8); 
      MapOverlay mapOverlay = new MapOverlay(p,"hi","locate new point"); 
      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 
{ 
    public MapOverlay(GeoPoint p, String string, String string2) { 
     // TODO Auto-generated constructor stub 
    } 
    @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; 

    } 
}} 

사용자로부터 임무를 받아 데이터베이스의 테이블에 넣어 클래스는 잘 작동 여기하지만 난 첫 번째 코드의 더 통관 넣어 :

public class newMission extends Activity 
    implements OnClickListener{ 
SQLiteDatabase sql; 
EditText e1,e2,e3,e4; 
Button b; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    Intent in =getIntent(); 
    setContentView(R.layout.newmission); 
    e1=(EditText) findViewById(R.id.edn1); 
    e2=(EditText) findViewById(R.id.edn2); 
    e3=(EditText) findViewById(R.id.edn3); 
    e4=(EditText) findViewById(R.id.edn4); 
    b=(Button) findViewById(R.id.btnew); 
    b.setOnClickListener(this); 
    sql=openOrCreateDatabase("db",0, null); 
    sql.execSQL("CREATE TABLE if not exists Mission" + 
      "" + 
      " (emp integer REFERENCES Employee2 (password)," + 
      "oper_n text,cust_n text,lat double," + 
      "long double,oper_id integer PRIMARY KEY AUTOINCREMENT)"); 
} 
@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    String opN=e1.getText().toString(); 
    String cuN=e2.getText().toString(); 
    String lats=e3.getText().toString(); 
    String lons=e4.getText().toString(); 
    try { 
      double lat=Double.parseDouble(lats); 
      double lon=Double.parseDouble(lons); 
     // float lat=Float.parseFloat(lats); 
     // float lon=Float.parseFloat(lons); 

    sql.execSQL("INSERT INTO Mission (oper_n,cust_n,lat,long)Values('"+opN+"','"+cuN+"'," +lat+ "," +lon+ ");"); 
    Toast.makeText(this,"Data Inserted",2000).show(); 
    //add to ToDo list too 
}catch (NumberFormatException nfe) { 
    Toast.makeText(this, "Please Enter Valid Data",2000).show(); 
} 
    } 

}

답변

0

오류가이 라인이다 listOfOverlays의 mv.getOverlays =(); listOfOverlays.clear();

는 for 루프에서이 코드를 제거합니다. 그리고 for 루프 전에. 또한 for 루프에서 mv.invalidate를 제거하고 루프 다음에 추가하십시오.

+0

여전히 하나의 장소를 지정! – Syamic

+0

'listOfOverlays = mv.getOverlays(); listOfOverlays.clear(); 위한 는 INT (I = 0; I zacharia

관련 문제