2016-03-08 6 views
1

Я новичок в Json. Я хочу получить расстояние между двумя местами, используя json. Я хочу получить «текст» (расстояние b/w два места) от объекта «расстояние», который находится в массиве «ноги», который, в свою очередь, находится в массиве «маршруты». Link (http://maps.googleapis.com/maps/api/directions/json?origin=Adoor&destination=Thiruvananthapuram%20Zoo&sensor=false)android json data retriving

Java код:

String uri="http://maps.googleapis.com/maps/api/directions/json?origin="+destination+"&destination="+tour_place+"&sensor=false"; 
      queue= Volley.newRequestQueue(getApplicationContext()); 
      JsonObjectRequest objectRequest=new JsonObjectRequest(Request.Method.GET, uri, (String) null, new Response.Listener<JSONObject>() { 
       @Override 
       public void onResponse(JSONObject response) { 
        try { 
         JSONArray array=response.getJSONArray("legs"); 
       distances.add(array.getJSONObject(0).getJSONObject("distance").getDouble("text")); 


        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      }, new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error){ 

       } 
      }); 
       queue.add(objectRequest); 
+0

Если вы новичок, вы должны сначала изучить об объектах JSon и JSon массивах и как разобрать JSON в андроиде –

+0

http://www.androidhive.info/2012/01/ android-json-parsing-tutorial/читайте этот урок – Sayyaf

ответ

1

Хорошо, теперь разместим код, который я сделал. Попробуйте это.

try { 
      JSONObject json = new JSONObject(jStr); 
      JSONArray jaRoutes = json.getJSONArray("routes"); 
      JSONArray jaLegs = jaRoutes.getJSONObject(0).getJSONArray("legs"); 
      JSONObject joDistance = jaLegs.getJSONObject(0).getJSONObject("distance"); 
      String text = joDistance.getString("text"); 
      Toast.makeText(this, text, Toast.LENGTH_SHORT); 
     } catch (JSONException e) { 
      Log.d("SAMPLE", e.toString()); 
     } 

Дайте мне знать, если это сработает.

+0

@jobin видел ваш вопрос относительно границ в другом ответе, просто ответит здесь, чтобы избежать обсуждения длинных комментариев. Маршруты - это JSONArray (следовательно, теги []), что означает, что он состоит из нескольких JSONObjects ({} тегов). границы все еще находятся в JSONObject в индексе 0, с ключевыми «границами» Это проще, если вы посмотрите на него в редакторе. Вы можете попробовать здесь [ссылка] (http://www.jsoneditoronline.org/). Просто вставьте строку JSON. Это будет выглядеть «красивее». –

0

Попробуйте

try{ 

JSONObject object = new JSONObject(thewholething.toString()); 
JSONArray routes =object.getJSONArray("routes"); 
JSONArray legs=routes.getJSONObject(0).getJSONArray("legs") 
JSONObject distance =legs.getJSONObject(0).getJSONObject("distance"); 
String text=distance.getString("text"); 

} 
catch (JSONException e) { 
     e.printStackTrace(); 
    } 

Теперь текст Строка содержит ваше значение.

+0

JSONArray legs = routes.etJSONArray («legs»); он показывает, что getJSONArray (int index) – jobin

+0

не был «et», это было «get». Моя ошибка ввода. Сожалею. Попробуй это сейчас. Я отредактировал ответ. :) –

+0

Для JSONArrays вы должны проходить через них (если есть несколько значений), но видя, что есть только один, и если вам нужен только этот конкретный, вы можете просто пойти и заменить его чем-то вроде этого: *** legs = routes.getJSONArray (0) .getJSONArray ("legs"); *** Сохранение шаблона .. Маршруты (Массив) -> Получить индекс 0, чтобы получить первый JSONObject, содержащий ключ * ** ноги ***, который является JSONArray .. Следовательно, сначала индекс, затем ключ после. –

0

С вашего ответа вы сначала разбираете массив маршрутов.

JsonArray routes = response.getJsonArray("routes"); 

Здесь вы можете получить массив ножек, как показано ниже.

JsonArray legs = routes.getJsonArray("legs"); 
0

Попробуйте это,

List<List<HashMap<String, String>>> routes = new ArrayList<List<HashMap<String,String>>>() ; 
     JSONArray jRoutes = null; 
     JSONArray jLegs = null; 
     JSONArray jSteps = null; 
     JSONObject jDistance = null; 
     JSONObject jDuration = null; 

     try { 

      jRoutes = jObject.getJSONArray("routes"); 

      /** Traversing all routes */ 
      for(int i=0;i<jRoutes.length();i++){ 
       jLegs = ((JSONObject)jRoutes.get(i)).getJSONArray("legs"); 

       List<HashMap<String, String>> path = new ArrayList<HashMap<String, String>>(); 

       /** Traversing all legs */ 
       for(int j=0;j<jLegs.length();j++){ 

        /** Getting distance from the json data */ 
        jDistance = ((JSONObject) jLegs.get(j)).getJSONObject("distance"); 
        HashMap<String, String> hmDistance = new HashMap<String, String>(); 
        hmDistance.put("distance", jDistance.getString("text")); 

        /** Getting duration from the json data */ 
        jDuration = ((JSONObject) jLegs.get(j)).getJSONObject("duration"); 
        HashMap<String, String> hmDuration = new HashMap<String, String>(); 
        hmDuration.put("duration", jDuration.getString("text")); 

        /** Adding distance object to the path */ 
        path.add(hmDistance); 

        /** Adding duration object to the path */ 
        path.add(hmDuration); 

        jSteps = ((JSONObject)jLegs.get(j)).getJSONArray("steps"); 

        /** Traversing all steps */ 
        for(int k=0;k<jSteps.length();k++){ 
         String polyline = ""; 
         polyline = (String)((JSONObject)((JSONObject)jSteps.get(k)).get("polyline")).get("points"); 
         List<LatLng> list = decodePoly(polyline); 

         /** Traversing all points */ 
         for(int l=0;l<list.size();l++){ 
          HashMap<String, String> hm = new HashMap<String, String>(); 
          hm.put("lat", Double.toString(((LatLng)list.get(l)).latitude)); 
          hm.put("lng", Double.toString(((LatLng)list.get(l)).longitude)); 
          path.add(hm); 
         } 
        } 
       } 
       routes.add(path); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     }catch (Exception e){ 
     } 
0

код Try ниже:

try { 
       StringRequest sr = new StringRequest(Request.Method.GET, uri, (String) null, new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 
        pDialog.dismiss(); 
        ; 
        Log.d("", ".......response====" + response.toString()); 

        //////// 
        try { 
         JSONObject object = new JSONObject(response); 
         if (serverCode.equalsIgnoreCase("0")) { 

         } 
         if (serverCode.equalsIgnoreCase("1")) { 
          try { 

           if ("1".equals(serverCode)) 
           { 
            JSONArray jsonArray = object.getJSONArray("routes"); 
           if(jsonArray.length()>0) 
           { 
            for(int i=0; i<jsonArray.length(); i++)         
            {          
            JSONArray legs =jsonArray.getJSONArray("legs"); 
            if(legs.length()>0) 
            { 
            for(int i=0; i<legs.length(); i++)         
            { 
            JSONObject object1 = legs.getJSONObject("distance"); 
            String distance = object1.getString("text"); 
            } 
           } 
          } 
         } 
       } 


          } catch (Exception e) { 
           e.printStackTrace(); 
          } 

         } 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
       } 
      } 
        , new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        pDialog.dismiss(); 
        ; 
        // VolleyLog.d("", "Error: " + error.getMessage()); 
        if (error instanceof TimeoutError || error instanceof NoConnectionError) { 
         Toast.makeText(ForgotPasswordActivity.this, "Timeout Error", 
           Toast.LENGTH_LONG).show(); 
        } else if (error instanceof AuthFailureError) { 
         VolleyLog.d("", "" + error.getMessage() + "," + error.toString()); 
        } else if (error instanceof ServerError) { 
         VolleyLog.d("", "" + error.getMessage() + "," + error.toString()); 
        } else if (error instanceof NetworkError) { 
         VolleyLog.d("", "" + error.getMessage() + "," + error.toString()); 
        } else if (error instanceof ParseError) { 
         VolleyLog.d("", "" + error.getMessage() + "," + error.toString()); 
        } 
       } 
      } 
      ) { 
       @Override 
       protected Map<String, String> getParams() { 
        Map<String, String> params = new HashMap<String, String>(); 

        params.put("user_email", email); 

        return params; 
       } 
      }; 
      sr.setShouldCache(true); 

      sr.setRetryPolicy(new DefaultRetryPolicy(50000 * 2, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
        DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 
      VolleySingleton.getInstance(getApplicationContext()).addToRequestQueue(sr); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     }