1

可能重复:
如何将 JSON lOutput(纬度和经度)放在地图上

我有一个主要活动来解析我的 mysql 中的 JSON 数据(表跟踪:纬度和经度)现在我想将此数据传递到我的 MapActivity 并显示在谷歌地图上。非常感谢任何帮助。谢谢!

这是我的 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;
            }

  }
4

1 回答 1

0

因为你只需要传递变量,所以使用意图并传递数据......而且我认为你已经编写了其余的代码

放入要打开 mapActivity 的 JSONActivity ,并且您还拥有变量纬度和经度及其值

Intent i= new Intent(getApplicationContext(), mapActivity.class);
i.putExtra("lattitude",lattitude);
i.putExtra("longitude",longitude);
startActivity(i);

然后在新的活动 mapActivity 中,检索这些值:

代替这个 putString coordinates[] = {"5.550381", "95.318699"};

 Bundle extras = getIntent().getExtras();
  if(extras !=null) {
    String lattitude= extras.getString("lattitude");
    String longitude= extras.getString("longitude");

     double lat = Double.parseDouble(lattitude);
    double lng = Double.parseDouble(longitude);

}
于 2012-06-30T19:42:06.070 回答