Tôi đang cố gắng sử dụng API bản đồ google để tìm nạp thời gian chỉ đường. Tôi hy vọng sẽ tạo một url, nhận được phản hồi JSON và sau đó kiểm tra phản hồi đó cho thời lượng di chuyển. Sau khi tôi tạo đối tượng JSON, tôi gặp khó khăn khi điều hướng nó. Đối với tôi, điều này cho thấy rằng tôi đã hoặc đang rối tung lên nhận phản hồi hoặc điều hướng đối tượng JSON. Tôi rất cảm kích nếu bạn có thể nhìn vào các bit và đoạn mã tôi đã ghép lại với nhau từ các hướng dẫn trên web.Phân tích JSON API Google Maps trong Ứng dụng Android
Mã này nhằm mục đích nhận phản hồi. Nó được bao quanh bởi một try/catch và nó đã không gây ra bất kỳ lỗi nào.
String stringUrl = <URL GOES HERE>;
URL url = new URL(stringUrl);
HttpURLConnection httpconn = (HttpURLConnection)url.openConnection();
if (httpconn.getResponseCode() == HttpURLConnection.HTTP_OK)
{
BufferedReader input = new BufferedReader(new InputStreamReader(httpconn.getInputStream()),8192);
String strLine = null;
while ((strLine = input.readLine()) != null)
{
response.append(strLine);
}
input.close();
}
String jsonOutput = response.toString();
Mã này được thiết kế để có đầu ra và phân tích nó vào chuỗi thức, thời gian, như lấy cảm hứng từ this stackoverflow answer cho một câu hỏi tương tự.
JSONObject jsonObject = new JSONObject(jsonOutput);
JSONObject routeObject = jsonObject.getJSONObject("routes");
JSONObject legsObject = routeObject.getJSONObject("legs");
JSONObject durationObject = legsObject.getJSONObject("duration");
String duration = durationObject.getString("text");
Tôi đang bắt ngoại lệ JSON trên dòng thứ hai của khối thứ hai. Bất cứ ai có thể giúp đỡ để sửa lỗi này? Hoặc có lẽ đề xuất một cách đơn giản hơn để có được cùng một dữ liệu?
EDIT: nhờ vào các câu trả lời hữu ích đầu tiên ở đây (từ aromero), nửa cuối bây giờ trông giống như:
JSONObject jsonObject = new JSONObject(responseText);
JSONArray routeObject = jsonObject.getJSONArray("routes");
JSONArray legsObject = routeObject.getJSONArray(2); ***error***
JSONObject durationObject = legsObject.getJSONObject(1);
String duration = durationObject.getString("text");
Nhưng nó vẫn là ném một ngoại lệ JSON, chỉ bây giờ nó sau dòng thứ ba . Tôi chắc chắn điều này là dễ dàng để sửa chữa, nhưng tôi thực sự sẽ đánh giá cao một số trợ giúp.
Phần liên quan của một ví dụ tệp JSON được hiển thị dưới đây:
{
"routes" : [
{
"bounds" : {
"northeast" : {
"lat" : 34.092810,
"lng" : -118.328860
},
"southwest" : {
"lat" : 33.995590,
"lng" : -118.446040
}
},
"copyrights" : "Map data ©2011 Google",
"legs" : [
{
"distance" : {
"text" : "12.9 mi",
"value" : 20807
},
"duration" : {
"text" : "27 mins",
"value" : 1619
},
Tôi nghĩ rằng bạn đã xác định được những gì tôi đang làm sai. Vẫn đang ủi các chi tiết cụ thể. Tôi sẽ đăng lại khi tôi sửa nó, trừ khi ai đó đánh tôi với nó. – user714403
Tuyến đường là một mảng, tôi cho rằng google đang trả lại cho bạn danh sách các tuyến đường có thể. Vì vậy, bạn cần phải lấy một trong số họ, hoặc làm một cái gì đó trên tất cả chúng. Bạn đang cố làm gì vậy? – aromero
Tuyệt vời! Cảm ơn bạn đã chỉnh sửa câu trả lời gốc của mình, tôi thực sự đánh giá cao việc nắm tay. Tôi thực sự không hiểu cú pháp/khoảng cách của JSON và bạn đã làm cho nó rõ ràng tuyệt vời. Cảm ơn nhiều! – user714403