Question

I'm trying to get some traffic data using the Bing Traffic API, but I keep getting a JSONException.

The JSON is located HERE. I used a JSON formatter located here in order to better get an idea of the data that's available to me. The url is publicly facing so I don't know if I need to provide some sort of authentication data or not, because I can just plug the url into my browser and view the JSON result right there.

Here's how I'm making the call

String url = "http://dev.virtualearth.net/REST/v1/Traffic/Incidents/37,-105,45,-94?key=" + API_KEY;

    // Create JSONParser instance
    JSONParser jParser = new JSONParser();

    // Get JSON from url
    final JSONObject jObject = jParser.getJSONFromUrl(url);


    try {
        JSONArray trafficData = jObject.getJSONObject(TAG_RESOURCESETS).getJSONArray(TAG_RESOURCES);
        Log.w("TrafficIncidentProvider", "Traffic Array consists of " + trafficData.toString());
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

I'm trying to get the object named "resourceSets" and the object named "resources", since it seems that that's where the data I need is embedded inside.. but obviously I'm going about it the wrong way because logCat is telling me that there's no value that matches that data. Here's the error logcat is giving me

  12-10 17:12:42.924: E/JSON Parser(26560): Error parsing data  org.json.JSONException:   End of input at character 0 of 
  12-10 17:12:42.944: W/System.err(26560): org.json.JSONException: No value for  resourceSets
  12-10 17:12:43.004: W/System.err(26560):  at org.json.JSONObject.get(JSONObject.java:354)
  12-10 17:12:43.004: W/System.err(26560):  at org.json.JSONObject.getJSONObject(JSONObject.java:569)
  12-10 17:12:43.014: W/System.err(26560):  at com.brightr.weathermate.providers.TrafficIncidentProvider.getTrafficIncidents(TrafficIncidentProvider.java:43)
  12-10 17:12:43.014: W/System.err(26560):  at com.brightr.weathermate.activities.LocationMapview$showTrafficConditions.doInBackground(LocationMapview.java:323)
  12-10 17:12:43.024: W/System.err(26560):  at com.brightr.weathermate.activities.LocationMapview$showTrafficConditions.doInBackground(LocationMapview.java:1)
  12-10 17:12:43.034: W/System.err(26560):  at android.os.AsyncTask$2.call(AsyncTask.java:185)
  12-10 17:12:43.034: W/System.err(26560):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
  12-10 17:12:43.044: W/System.err(26560):  at java.util.concurrent.FutureTask.run(FutureTask.java:138)
  12-10 17:12:43.044: W/System.err(26560):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
  12-10 17:12:43.044: W/System.err(26560):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)

Any clarity on this issue would be greatly appreciated, guys. Thanks as always!

EDIT: As requested, here is my JSONParser code which contains my HttpPost method

 public JSONObject getJSONFromUrl(String url) {

    // Making HTTP request
    try {
        // defaultHttpClient
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);

        HttpResponse httpResponse = httpClient.execute(httpPost);


        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();          

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        is.close();
        json = sb.toString();
    } catch (Exception e) {
        Log.e("Buffer Error", "Error converting result " + e.toString());
    }

    // try parsing the string to a JSON object
    try {
        if(json != null){
        jObj = new JSONObject(json);
        }else{
            jObj = null;
        }
    } catch (JSONException e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    }

    // return JSON String
    return jObj;

}
Was it helpful?

Solution

Parse this json as:

         try {
                JSONObject jobject=new JSONObject("Your_json_String");
                JSONArray jarray=jobject.getJSONArray("resourceSets");
                  System.out.println("dateNow jarray :"+jarray.length());
                  for(int i=0;i<jarray.length();i++){
                      if(!jarray.isNull(i)){
                      JSONObject jobjresources=jarray.getJSONObject(i);
                      System.out.println("dateNow jobjresources :"+jobjresources.length());
                      //estimatedTotal
                      if(!jobjresources.isNull("estimatedTotal")){
                        String str_estimatedTotal=jobjresources.getString("estimatedTotal");
                        System.out.println("resources str_estimatedTotal :"+str_estimatedTotal);

                      }
                      else{
                          System.out.println("resources str_estimatedTotal NULL for :"+i+" ITEM");
                      }
                        if(!jobjresources.isNull("resources")){
                        //resources
                        JSONArray jarrresources=jobjresources.getJSONArray("resources");
                        for(int j=0;j<jarrresources.length();j++){
                            System.out.println("$$$$$$$$$$ ITEM "+j+" START $$$$$$$$$$$$$$$$#");
                            if(!jarrresources.isNull(j)){

                            JSONObject jobjjarrresources=jarrresources.getJSONObject(j);
                            if(!jobjjarrresources.isNull("__type")){
                              //__type"
                            String str_type=jobjjarrresources.getString("__type");
                            System.out.println("resources str_type :"+str_type);
                            }
                            else{
                                System.out.println("resources __type NULL for :"+j+" ITEM");
                            }
                              //description"
                            if(!jobjjarrresources.isNull("description")){
                            String strdescription=jobjjarrresources.getString("description");
                            System.out.println("resources description :"+strdescription);
                            }
                            else{
                                System.out.println("resources description NULL for :"+j+" ITEM");
                            }
                              //lane"
                            if(!jobjjarrresources.isNull("lane")){
                            String strlane=jobjjarrresources.getString("lane");
                            System.out.println("resources lane :"+strlane);
                            }
                            else{
                                System.out.println("resources lane NULL for :"+j+" ITEM");
                            }
                              //lane"
                            if(!jobjjarrresources.isNull("point")){
                                JSONObject jobjpoint=jobjjarrresources.getJSONObject("point");
                                //point
                                if(!jobjpoint.isNull("coordinates")){
                                JSONArray jarcoordinates=jobjpoint.getJSONArray("coordinates");
                                for(int k=0;k<jarcoordinates.length();k++){
                                    //JSONObject jobjcoordinates=jarcoordinates.getString(k);
                                     if(!jarcoordinates.isNull(k)){
                                    String str_zero=jarcoordinates.getString(k);
                                    System.out.println("coordinates :"+k+": "+str_zero);
                                     }
                                     else{
                                         System.out.println("coordinates :"+k+" is NULL:"+j+" ITEM");
                                     }
                                 }
                                }
                                else{
                                    System.out.println("resources coordinates NULL for :"+j+" ITEM");
                                }
                            }
                            else{
                                System.out.println("resources point NULL for :"+j+" ITEM");
                            }

                              //roadClosed"
                              //lane"
                            if(!jobjjarrresources.isNull("roadClosed")){

                            String strroadClosed=jobjjarrresources.getString("roadClosed");
                            System.out.println("resources roadClosed :"+strroadClosed);
                            }
                            else{
                                System.out.println("resources roadClosed NULL for :"+j+" ITEM");
                            }
                              //severity"
                            if(!jobjjarrresources.isNull("severity")){
                            String strroadseverity=jobjjarrresources.getString("severity");
                            System.out.println("resources severity :"+strroadseverity);
                            }
                            else
                            {
                                System.out.println("resources severity NULL for :"+j+" ITEM");
                            }
                        }
                            else{
                                System.out.println("jarrresources    NULL for :"+j+" ITEM");
                            }

                            System.out.println("##################### ITEM "+j+" END ##############");
                        }
                       }
                        else{
                            System.out.println("resources    NULL for :"+i+" ITEM");
                        }
                  }

                   else{
                       System.out.println("resources     NULL for : ITEM");
                      }  
          }


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

}

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top