2012-07-01 105 views
0

我有一個主要活動,它解析來自我的mysql的JSON數據(表格跟蹤:緯度和經度)現在我想將這些數據傳遞給我的MapActivity並顯示在谷歌地圖上。任何幫助,高度讚賞。謝謝!如何在地圖上放置JSON lOutput(經度和緯度)

這個我JSONactivity

public class JSONActivity extends Activity{ 
    private JSONObject jObject; 

    private String xResult =""; 
    //Seusuaikan url dengan nama domain 
    private String url = "http://10.0.2.2/labiltrack/daftartracking.php"; 

    @Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.daftartrack); 
    TextView txtResult = (TextView)findViewById(R.id.TextViewResult); 
    //url += "?lattitude=" + UserData.getEmail(); 
    xResult = getRequest(url); 
    try { 
     parse(txtResult); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    } 

private void parse(TextView txtResult) throws Exception { 
// TODO Auto-generated method stub 
jObject = new JSONObject(xResult); 
JSONArray menuitemArray = jObject.getJSONArray("joel"); 
String sret=""; 
//int j = 0; 
for (int i = 0; i < menuitemArray.length(); i++) { 
    sret +=menuitemArray.getJSONObject(i). 
      getString("lattitude").toString()+" : "; 
    System.out.println(menuitemArray.getJSONObject(i) 
      .getString("lattitude").toString()); 
    System.out.println(menuitemArray.getJSONObject(i).getString(
    "longitude").toString()); 
    sret +=menuitemArray.getJSONObject(i).getString(
    "lattitude").toString()+"\n"; 
    //j=i; 
    }txtResult.setText(sret); 

} 
/** 
* Method untuk Mengirimkan data keserver 
* event by button login diklik 
* 
* @param view 
*/ 
private String getRequest(String url) { 
// TODO Auto-generated method stub 
String sret=""; 
HttpClient client = new DefaultHttpClient(); 
HttpGet request = new HttpGet(url); 
try{ 
    HttpResponse response = client.execute(request); 
    sret =request(response); 

    }catch(Exception ex){ 
    Toast.makeText(this,"jo "+sret, Toast.LENGTH_SHORT).show(); 
    } 
    return sret; 
} 

    /** 
    * Method untuk Menenrima data dari server 
    * @param response 
* @return 
    */ 
private String request(HttpResponse response) { 
    // TODO Auto-generated method stub 

    String result = ""; 
    try{ 
     InputStream in = response.getEntity().getContent(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(in)); 
     StringBuilder str = new StringBuilder(); 
     String line = null; 
     while((line = reader.readLine()) != null){ 
     str.append(line + "\n"); 
    } 
    in.close(); 
    result = str.toString(); 
    }catch(Exception ex){ 
    result = "Error"; 
    } 
    return result; 
    } 
    } 

,這我mapActivity

public class mapactivity extends MapActivity { 
private MapView mapView; 
MapController mc; 
GeoPoint p; 
//private MyLocationOverlay me = null; 

class MapOverlays extends com.google.android.maps.Overlay 
{ 

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

    //translate the geopoint to screen pixels 
    Point screenPts = new Point(); 
    mapView.getProjection().toPixels(p, screenPts); 

    //tambah marker 
    Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.pin_red); 
    canvas.drawBitmap(bmp, screenPts.x, screenPts.y-50, null); 
    //mapView.setSatellite(true);  

    return true; 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event, MapView mapView) 
    { 
    //---when user lifts his finger--- 
    if (event.getAction() == 1) {     
     GeoPoint p = mapView.getProjection().fromPixels(
      (int) event.getX(), 
      (int) event.getY()); 

     Toast.makeText(getBaseContext(), 
       p.getLatitudeE6()/1E6 + "," + 
       p.getLongitudeE6() /1E6 , 
       Toast.LENGTH_SHORT).show(); 
     mc.animateTo(p); 

      //geocoding 
     Geocoder geoCoder = new Geocoder(
      getBaseContext(), Locale.getDefault()); 
     try { 
      List<Address> addresses = geoCoder.getFromLocation(
       p.getLatitudeE6()/1E6, 
       p.getLongitudeE6()/1E6, 1); 

      String add = ""; 
      if (addresses.size() > 0) 
      { 
       for (int i=0; i<addresses.get(0).getMaxAddressLineIndex(); 
         i++) 
        add += addresses.get(0).getAddressLine(i) + "\n"; 
      } 

      Toast.makeText(getBaseContext(), add, Toast.LENGTH_SHORT).show(); 
     } 
     catch (IOException e) {     
      e.printStackTrace(); 
     } 
     return true; 
    } 
     else     
     return false; 
    }  }   

    /** Called when the activity is first created. */ 
    @SuppressWarnings("deprecation") 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.mapview1); 

//utk mnampilkan zoom 
mapView = (MapView) findViewById(R.id.mapView); 
LinearLayout zoomLayout = (LinearLayout)findViewById(R.id.zoom); 
View zoomView = mapView.getZoomControls(); 

    zoomLayout.addView(zoomView, 
     new LinearLayout.LayoutParams(
     LayoutParams.FILL_PARENT, 
     LayoutParams.FILL_PARENT)); 
    mapView.displayZoomControls(true);  

    //menampilkan default peta banda aceh 
    mc = mapView.getController(); 
    String coordinates[] = {"5.550381", "95.318699"}; 
    double lat = Double.parseDouble(coordinates[0]); 
    double lng = Double.parseDouble(coordinates[1]); 

     p = new GeoPoint(
     (int) (lat * 1E6), 
     (int) (lng * 1E6)); 

     mc.animateTo(p); 
     mc.setZoom(14); 
     mapView.invalidate(); 

     //tambah marker 
     MapOverlays mapOverlay = new MapOverlays(); 
     List<Overlay> listOfOverlays = mapView.getOverlays(); 
     listOfOverlays.clear(); 
     listOfOverlays.add(mapOverlay);   

     mapView.invalidate(); 
     } 


    public void btnSatelitClick(View v){ 
    mapView.setSatellite(true); 
    mapView.setStreetView(false); 

} 

public void btnjalanClick (View v){ 
    mapView.setSatellite(false); 
    mapView.setStreetView(true); 
    } 

      protected boolean isRouteDisplayed() 
      { 
       //auto generate method 
       return false; 
     } 

    } 

我jsonactivity是從MySQL(場 「緯度」 和 「經度」)到列表視圖中獲取數據,但現在我想在谷歌地圖上顯示數據(經度和緯度),我如何做到這一點? 請幫助我,在此先感謝!

回答

0

你需要從其他類獲得包:這個類將是您mapActivity

Bundle b = getIntent().getExtras(); // Getting the Bundle object that pass from another activity 
     int SelectedPropertylat = b.getInt("SelectedLat"); 
     int SelectedPropertylong = b.getInt("SelectedLong"); 

     String lattitude = Integer.toString(SelectedPropertylat);   
     String longertude = Integer.toString(SelectedPropertylong); 

     Log.d(lattitude,longertude); 

而且考慮datafrom的MySQL到您的應用程序使用此:

try{ 

    JSONArray earthquakes = json.getJSONArray("PropertyDetails"); 

    for(int i=0;i<earthquakes.length();i++){       

     JSONObject e = earthquakes.getJSONObject(i); 
       lat = e.getString("P_Lat"); 
     lonng = e.getString("P_Long"); 

然後將其轉換lat和長成一個字符串如:

lonnng = Integer.parseInt(lonng.toString()); 
     latt =Integer.parseInt(lat.toString()); 

然後將數據傳遞到您的mapvie瓦特這樣的:

Intent moreDetailsIntent = new Intent(PropertiesDetails.this,mapActivity .class); 

      Bundle dataBundle = new Bundle(); 
      dataBundle.putInt("SelectedLong",lonnng); 
      dataBundle.putInt("SelectedLat", latt); 
      moreDetailsIntent.putExtras(dataBundle); 
      startActivity(moreDetailsIntent); 
+0

我在哪裏可以把這個代碼 「RY { JSONArray地震= json.getJSONArray(」 PropertyDetails「);對於(int i = 0; i

+0

它與你的JSONactivity類似,只是忽略它..並隨時問我:) – Zamani

相關問題