2011-08-29 15 views
8

मैं दिशा समय लाने के लिए Google मानचित्र API का उपयोग करने का प्रयास कर रहा हूं। मैं एक यूआरएल बनाने की उम्मीद कर रहा हूं, जेएसओएन प्रतिक्रिया प्राप्त करें, और फिर यात्रा अवधि के लिए उस प्रतिक्रिया की जांच करें। जेएसओएन ऑब्जेक्ट बनाने के बाद, मुझे इसे नेविगेट करने में परेशानी है। मेरे लिए, यह इंगित करता है कि मैंने या तो प्रतिक्रिया प्राप्त करने या JSON ऑब्जेक्ट को नेविगेट करने में गड़बड़ कर दी है। अगर आप बिट्स और कोड के टुकड़ों पर नजर डाल सकते हैं तो मैं इसकी सराहना करता हूं, मैंने वेब के ट्यूटोरियल्स से एक साथ सिलाई है।एंड्रॉइड ऐप में Google मानचित्र एपीआई का JSON पार्सिंग

यह कोड प्रतिक्रिया प्राप्त करने के लिए है। यह एक कोशिश/पकड़ से घिरा हुआ है और इसने किसी भी त्रुटि को ट्रिगर नहीं किया है।

 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"); 

मैं दूसरे ब्लॉक की दूसरी पंक्ति पर एक JSON अपवाद पकड़ रहा हूं। क्या कोई इसे ठीक करने में मदद कर सकता है? या शायद एक ही डेटा प्राप्त करने का एक आसान तरीका सुझा सकता है?

संपादित करें: यहाँ (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

"मार्गों" के बजाय getJSONObject का उपयोग कर के, एक सरणी है, getJSONArray

"पैर" का उपयोग एक सरणी भी है।

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 आपको संभावित मार्गों की एक सूची लौटा रहा है। तो आपको उनमें से एक को पकड़ने की ज़रूरत है, या उन सभी पर कुछ करना है। तुम क्या करने की कोशिश कर रहे हो? – aromero

+0

बहुत बढ़िया! आपके मूल उत्तर में संपादन के लिए धन्यवाद, मैं वास्तव में हाथ पकड़ने की सराहना करता हूं। मैं वास्तव में JSON के वाक्यविन्यास/अंतर को समझ नहीं पाया और आपने इसे अद्भुत रूप से स्पष्ट कर दिया है। बहुत धन्यवाद! – user714403

2

मैं एंड्रॉइड में Google की दिशा एपीआई का उपयोग करने की भी कोशिश कर रहा था। तो मैंने ऐसा करने में मदद करने के लिए एक ओपन सोर्स प्रोजेक्ट बनाया। आप इसे यहाँ पा सकते हैं: 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

क्या मेरे लिए गिटूब से अपने वाणिज्यिक ऐप में अपना पूरा कोड लागू करना संभव है? –

संबंधित मुद्दे