0

Bing Traffic API を使用してトラフィック データを取得しようとしていますが、JSONException が発生し続けます。

JSON はHEREにあります。ここにある JSON フォーマッターを使用して、利用可能なデータをよりよく把握しました。URL は公開されているため、ある種の認証データを提供する必要があるかどうかはわかりません。URL をブラウザーにプラグインして、JSON の結果をすぐに表示できるからです。

これが私が電話をかける方法です

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();
    }

「resourceSets」という名前のオブジェクトと「resources」という名前のオブジェクトを取得しようとしています。必要なデータが内部に埋め込まれているように見えるからです。そのデータに一致する値はありません。これがlogcatが私に与えているエラーです

  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)

この問題を明確にしていただければ幸いです。いつもありがとう!

編集: 要求に応じて、ここに私の HttpPost メソッドを含む JSONParser コードがあります

 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;

}
4

1 に答える 1

1

この json を次のように解析します。

         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();
            }

}

于 2012-12-10T22:32:04.903 に答える