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