2012-07-13 27 views
0

我有一個主要的活動,它解析來自我的MySQL(表格的緯度和經度)的JSON數據。現在我想將這些數據傳遞給我的MapActivity,並將其顯示在Google地圖上。任何幫助,高度讚賞。謝謝!在谷歌地圖/ Android上顯示JSON輸出

這是我JSONactivity

public class JSONActivity extends Activity{ 
    private JSONObject jObject; 
    private String xResult =""; 
    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=""; 
    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"; 
    } 
    txtResult.setText(sret); 
} 
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; 
} 

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; 
    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); 
     Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.pin_red); 
     canvas.drawBitmap(bmp, screenPts.x, screenPts.y-50, null); 
     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); 
     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); 
    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); 
    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(); 
    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(場 「緯度」 和 「經度」)中獲取數據到一個列表視圖,但現在我想在Google地圖上顯示該數據(經度和緯度)。我怎麼能這樣做?請幫助我,提前致謝!

回答

0

我不知道如果我理解你的問題,但在較高的水平,你可以做到以下幾點:

1)你的JSON活動從網絡調用獲取數據,並存儲在數據庫中,填充信息列表視圖。這裏要注意的一點是基於我在代碼中看到的內容:不要直接在主UI線程中進行網絡調用。在蜂窩和更高版本上,這將拋出一個異常。我建議使用AsyncTask

2)你可以捕獲ListView onListItemClick,它可以給你元素的位置,然後你可以查找你的列表數據集合來找出什麼緯度和經度被要求顯示。然後您需要使用startActivity來啓動您的mapActivity並將Extras中的數據傳遞給意圖。

3)在您的mapActivity中,獲取意向並讀取額外值,即經度和緯度,並將這些值用於您的coordinates變量。

+0

hii,你可以這樣做嗎?或者只是一個小例子 – user1520642 2012-07-13 15:23:20