2014-08-29 83 views
1

我能使用langitude和纬度,但以检索从谷歌公交API数据不directions属性。这是我到目前为止谷歌公交JSON解析方向

public class MainActivity extends Activity { 
     /** Called when the activity is first created. */ 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 
     if (android.os.Build.VERSION.SDK_INT > 9) { 
      StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
      StrictMode.setThreadPolicy(policy); 
    } 
      try 
      { 
       String Lat=Double.toString(22.508507985602836); 
       String Long=Double.toString(73.474991977022533); 

       String Address = ReadAddressFromWebService(Lat,Long); 
       Toast.makeText(this,Address, Toast.LENGTH_LONG).show(); 
      } 

      catch(Exception e) 
      { 
       Log.e("error","Json parsing error :"+ e.toString()); 
       Toast.makeText(this,e.toString(), Toast.LENGTH_LONG).show(); 
      } 
    } 

    public String ReadAddressFromWebService(String latitude, String longitude) { 
      String Address=""; 
      StringBuffer sb=new StringBuffer(); 
      sb.append("http://maps.googleapis.com/maps/api/geocode/json?latlng="+ 
       latitude +","+longitude +"&sensor=false"); 
       String url=sb.toString(); 
      HttpClient httpClient=new DefaultHttpClient(); 

      Log.i("","HTTP client created"); 
      String responseData=""; 
     try { 
      HttpResponse response=httpClient.execute(new HttpGet(url)); 
      response.addHeader("Accept-Language", "it-IT"); 
      HttpEntity entity=response.getEntity(); 
      Log.i("", "HTTP Response arrived"); 

      BufferedReader bf=new BufferedReader(new 
      InputStreamReader((entity.getContent()),"UTF-8")); 
      String line=""; 
      Log.i("","Start buffre reading"); 

     while((line=bf.readLine())!=null){ 
      responseData=responseData+line; 
     } 

      JSONObject jsonObj = new JSONObject(responseData); 

      JSONArray resultArry = jsonObj.getJSONArray("results"); 

      Address = resultArry.getJSONObject(0).getString("formatted_address").toString(); 

     } catch (Exception e) { 
     // TODO Auto-generated catch block 
      e.printStackTrace(); 
    } 

    return Address; 
    } 
} 

我试图改变做在这样的StringBuffersb.append("http://maps.googleapis.com/maps/api/directions/json?origin="+ latitude +"&destination="+longitude +"&sensor=false");

但我用看到的结果并没有显示任何东西..敬酒是空的,我得到了一个行错误的JSONObject:地址= resultArry.getJSONObject(0).getString("formatted_address").toString();

因此,这为t他JSON我将解析:http://maps.googleapis.com/maps/api/directions/json?origin=vicenza&destination=costabissara&sensor=false

,我会显示路线..当然我改变:

`JSONArray resultArry = jsonObj.getJSONArray( “结果”);

 Address = resultArry.getJSONObject(0).getString("formatted_address").toString();` 

`JSONArray resultArry = jsonObj.getJSONArray( “路由”);

 Address = resultArry.getJSONObject(0).getString("legs").toString();` 

但没有成功..

回答

1

我想你的例子,它的工作。我所要做的唯一的变化是强似坐标ReadAddressFromWebService我通过出发地和目的地的字符串:

String from = "vicenza"; 
String to = "costabissara"; 

String Address = ReadAddressFromWebService(from,to); 

origindestination作品与地名不坐标。

+0

谢谢你,你是对的..但是,在这种方式下,我可以设置2个不同的城市..我怎么能回收目的地使用同一城市的2个地址?我不知道你是否理解.. – 2014-08-29 13:03:34

+1

@ End.Game [这是一个检查](http://maps.googleapis.com/maps/api/directions/json?origin=ViaEugenioMontale36077,Vicenza,Italy&destination=StradadelleCaperse,15536​​100Casale ,意大利维琴察&传感器= FALSE)。你只需用逗号分隔地址,城市和国家。您可以从[Google地图](http://maps.google.com)获取完整地址。 – Simas 2014-08-29 13:12:02

+0

哦,好的,非常感谢你:) – 2014-08-29 13:16:02