2011-08-29 22 views
8

私は方向時間を取得するためにGoogle MapsのAPIを使用しようとしています。私は、URLを作成し、JSON応答を取得し、旅行時間のその応答を調べることを望んでいます。 JSONオブジェクトを作成した後、私はそれをナビゲートするのが難しいです。私にとっては、これは、私が応答を得ることを迷惑にしているか、JSONオブジェクトをナビゲートしていることを示しています。あなたがウェブ上のチュートリアルから一緒に縫い合わせたコードの断片を覗き見ることができたら、私はそれを感謝します。JSONの構文解析

このコードは、応答を取得することを意図しています。それはtry/catchで囲まれており、エラーは発生していません。

 String stringUrl = <URL GOES HERE>; 

     URL url = new URL(stringUrl); 
     HttpURLConnection httpconn = (HttpURLConnection)url.openConnection(); 
     if (httpconn.getResponseCode() == HttpURLConnection.HTTP_OK) 
     { 
      BufferedReader input = new BufferedReader(new InputStreamReader(httpconn.getInputStream()),8192); 
      String strLine = null; 
      while ((strLine = input.readLine()) != null) 
      { 
       response.append(strLine); 
      } 
      input.close(); 
     } 
     String jsonOutput = response.toString(); 

このコードは、その出力を取得し、同様の問題のためにthis stackoverflow answer触発され、最終列、持続時間、にそれを解析することを意図しています。

 JSONObject jsonObject = new JSONObject(jsonOutput); 
     JSONObject routeObject = jsonObject.getJSONObject("routes"); 
     JSONObject legsObject = routeObject.getJSONObject("legs"); 
     JSONObject durationObject = legsObject.getJSONObject("duration"); 
     String duration = durationObject.getString("text"); 

2番目のブロックの2行目でJSON例外を捕捉しています。誰でもこれを解決するのに役立つことができますか?または、同じデータを取得する簡単な方法を提案してください。

EDIT:(aromeroから)ここで最初の投票回答のおかげで、後半は今のようになります。

JSONObject jsonObject = new JSONObject(responseText); 
    JSONArray routeObject = jsonObject.getJSONArray("routes"); 
    JSONArray legsObject = routeObject.getJSONArray(2); ***error*** 
    JSONObject durationObject = legsObject.getJSONObject(1); 
     String duration = durationObject.getString("text"); 

しかし、それはまだJSONの例外をスローして、今だけ、それは第三行の後です。これは恥ずかしいほど簡単に解決できると確信していますが、本当に助けていただければ幸いです。

例JSONファイルの関連部分を以下に示す:

{ 
    "routes" : [ 
     { 
     "bounds" : { 
      "northeast" : { 
       "lat" : 34.092810, 
       "lng" : -118.328860 
      }, 
      "southwest" : { 
       "lat" : 33.995590, 
       "lng" : -118.446040 
      } 
     }, 
     "copyrights" : "Map data ©2011 Google", 
     "legs" : [ 
      { 
       "distance" : { 
        "text" : "12.9 mi", 
        "value" : 20807 
       }, 
       "duration" : { 
        "text" : "27 mins", 
        "value" : 1619 
       }, 

答えて

14

「ルート」は、また、アレイはgetJSONArray

「脚」を使用する代わりに、getJSONObjectを使用する、アレイです。

JSONObject jsonObject = new JSONObject(responseText); 

// routesArray contains ALL routes 
JSONArray routesArray = jsonObject.getJSONArray("routes"); 
// Grab the first route 
JSONObject route = routesArray.getJSONObject(0); 
// Take all legs from the route 
JSONArray legs = route.getJSONArray("legs"); 
// Grab first leg 
JSONObject leg = legs.getJSONObject(0); 

JSONObject durationObject = leg.getJSONObject("duration"); 
String duration = durationObject.getString("text"); 
+0

私はあなたが私が間違ってやっているものを同定したと思います。まだ詳細をアイロンしている。誰かがそれに気づかない限り、私はそれを修正するときに私はポストバックします。 – user714403

+0

ルートは配列です。可能なルートのリストをGoogleから返すと仮定します。だからあなたはそれらの1つをつかむか、それらのすべてで何かをする必要があります。あなたは何をしようとしているのですか? – aromero

+0

驚くばかり!オリジナルの回答を編集していただきありがとうございます。本当にありがとうございます。私は本当にJSONの構文/スペーシングを理解していませんでした。どうもありがとう! – user714403

2

私はAndroidのGoogleのDirection Apiも使用しようとしていました。 私はそれを行うためのオープンソースプロジェクトを作成しました。 あなたはここでそれを見つけることができます:https://github.com/MathiasSeguy-Android2EE/GDirectionsApiUtils

どのように動作する、間違いなく単に:

public class MainActivity extends ActionBarActivity implements DCACallBack{ 
/** 
* Get the Google Direction between mDevice location and the touched location using the  Walk 
* @param point 
*/ 
private void getDirections(LatLng point) { 
    GDirectionsApiUtils.getDirection(this, startPoint, endPoint, GDirectionsApiUtils.MODE_WALKING); 
} 

/* 
* The callback 
* When the directions is built from the google server and parsed, this method is called and give you the expected direction 
*/ 
@Override 
public void onDirectionLoaded(List<GDirection> directions) {   
    // Display the direction or use the DirectionsApiUtils 
    for(GDirection direction:directions) { 
     Log.e("MainActivity", "onDirectionLoaded : Draw GDirections Called with path " + directions); 
     GDirectionsApiUtils.drawGDirection(direction, mMap); 
    } 
} 
+0

Githubのコード全体を商用アプリケーションに実装することは可能ですか? –