Я пытаюсь получить некоторые данные о трафике с помощью Bing Traffic API, но продолжаю получать JSONException.
JSON находится ЗДЕСЬ а>. Я использовал средство форматирования 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» и объект с именем «ресурсы», так как кажется, что именно там внутри встроены нужные мне данные.. но, очевидно, я делаю это неправильно, потому что logCat говорит мне, что нет значения, которое соответствует этим данным. Вот ошибка 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)
Любая ясность по этому вопросу будет принята с благодарностью, ребята. Как всегда спасибо!
РЕДАКТИРОВАТЬ: В соответствии с запросом, вот мой код JSONParser, который содержит мой метод HttpPost
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;
}