Anonymous
Анализ данных из API Google Directions с использованием GSON
Сообщение
Anonymous » 11 окт 2024, 17:22
Мой ответ API таков:
Код: Выделить всё
{
"geocoded_waypoints": [],
"routes": [
{
"bounds": {},
"copyrights": "Map data ©2024",
"legs": [
{
"distance": {
"text": "22.7 km",
"value": 22733
},
"duration": {
"text": "56 mins",
"value": 3358
},
"end_address": "B-14, opp. Defence Colony, near Lajpat Nagar Metro Station, Block A, Lajpat Nagar II, Lajpat Nagar, New Delhi, Delhi 110024, India",
"end_location": {},
"start_address": "C5M9+9XG, Southend Dr, Dera Village, Dera Mandi, New Delhi, Delhi 110074, India",
"start_location": {},
"steps": [],
"traffic_speed_entry": [],
"via_waypoint": []
}
],
"overview_polyline": {},
"summary": "SSN Marg",
"warnings": [],
"waypoint_order": []
}
],
"status": "OK"
}
Мне нужны следующие значения:
Расстояние – (текст: 22,7 км)
Недлительность – (текст: 56 минут)
конечный_адрес.
Для простоты я взял ответ JSONArray от "маршрутов".
Код: Выделить всё
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, null,
new Response.Listener() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray jsonArray = response.getJSONArray("routes");
Type collectionType = new TypeToken[*]>(){}.getType();
List directionsApiResponseList =
new Gson().fromJson(jsonArray.toString(), collectionType);
Log.d("ABCDE", directionsApiResponseList.get(0).getLegsList().get(0).getEnd_address());
} catch (JSONException e) {
throw new RuntimeException(e);
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
requestQueue.add(jsonObjectRequest);
А это класс DirectionsApiResponse для использования GSON –
Код: Выделить всё
import java.util.List;
public class DirectionsApiResponse {
private List legsList;
public List getLegsList() {
return legsList;
}
public void setLegsList(List legsList) {
this.legsList = legsList;
}
}
class legs {
private distance distance;
private duration duration;
private String end_address;
public distance getDistance() {
return distance;
}
public void setDistance(distance distance) {
this.distance = distance;
}
public duration getDuration() {
return duration;
}
public void setDuration(duration duration) {
this.duration = duration;
}
public String getEnd_address() {
return end_address;
}
public void setEnd_address(String end_address) {
this.end_address = end_address;
}
}
class distance {
private String text;
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
class duration {
private String text;
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
На всякий случай я создал метод получения и установки для всех.
Если попытаться получить результаты из -
directionsApiResponse.getLegsList().toString()
directionsApiResponseList.get(0).getLegsList().get(0).getEnd_address()< /li>
Выдает «NullPointerException». Я ясно вижу, что «маршруты» — это массив, в котором есть 1 элемент в позиции 0, а «ноги» также имеют 1 элемент в позиции 0.
Вопросы –
Что я делаю не так?
И есть ли какой-нибудь письменный код от Google для анализа ответа JSON от Directions API, где я могу просто удалить элементы GSON мне не нужны?
Подробнее здесь:
https://stackoverflow.com/questions/790 ... using-gson
1728656577
Anonymous
Мой ответ API таков: [code]{ "geocoded_waypoints": [], "routes": [ { "bounds": {}, "copyrights": "Map data ©2024", "legs": [ { "distance": { "text": "22.7 km", "value": 22733 }, "duration": { "text": "56 mins", "value": 3358 }, "end_address": "B-14, opp. Defence Colony, near Lajpat Nagar Metro Station, Block A, Lajpat Nagar II, Lajpat Nagar, New Delhi, Delhi 110024, India", "end_location": {}, "start_address": "C5M9+9XG, Southend Dr, Dera Village, Dera Mandi, New Delhi, Delhi 110074, India", "start_location": {}, "steps": [], "traffic_speed_entry": [], "via_waypoint": [] } ], "overview_polyline": {}, "summary": "SSN Marg", "warnings": [], "waypoint_order": [] } ], "status": "OK" } [/code] Мне нужны следующие значения: [list] [*]Расстояние – (текст: 22,7 км) [*]Недлительность – (текст: 56 минут) [*]конечный_адрес. [/list] Для простоты я взял ответ JSONArray от "маршрутов". [code]JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener() { @Override public void onResponse(JSONObject response) { try { JSONArray jsonArray = response.getJSONArray("routes"); Type collectionType = new TypeToken[*]>(){}.getType(); List directionsApiResponseList = new Gson().fromJson(jsonArray.toString(), collectionType); Log.d("ABCDE", directionsApiResponseList.get(0).getLegsList().get(0).getEnd_address()); } catch (JSONException e) { throw new RuntimeException(e); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }); requestQueue.add(jsonObjectRequest); [/code] А это класс DirectionsApiResponse для использования GSON – [code]import java.util.List; public class DirectionsApiResponse { private List legsList; public List getLegsList() { return legsList; } public void setLegsList(List legsList) { this.legsList = legsList; } } class legs { private distance distance; private duration duration; private String end_address; public distance getDistance() { return distance; } public void setDistance(distance distance) { this.distance = distance; } public duration getDuration() { return duration; } public void setDuration(duration duration) { this.duration = duration; } public String getEnd_address() { return end_address; } public void setEnd_address(String end_address) { this.end_address = end_address; } } class distance { private String text; public String getText() { return text; } public void setText(String text) { this.text = text; } } class duration { private String text; public String getText() { return text; } public void setText(String text) { this.text = text; } } [/code] На всякий случай я создал метод получения и установки для всех. Если попытаться получить результаты из - [list] directionsApiResponse.getLegsList().toString() [*]directionsApiResponseList.get(0).getLegsList().get(0).getEnd_address()< /li> [/list] Выдает «NullPointerException». Я ясно вижу, что «маршруты» — это массив, в котором есть 1 элемент в позиции 0, а «ноги» также имеют 1 элемент в позиции 0. Вопросы – [list] Что я делаю не так? [*]И есть ли какой-нибудь письменный код от Google для анализа ответа JSON от Directions API, где я могу просто удалить элементы GSON мне не нужны? [/list] Подробнее здесь: [url]https://stackoverflow.com/questions/79078453/parse-data-from-google-directions-api-using-gson[/url]