我是编程新手,我想构建一个从谷歌地图方向获取数据的应用程序,第一个用户需要在列表视图中获取可用的路径。
我的JSON数据就是这个
{
geocoded_waypoints: [],
routes: [
{
bounds: {
},
copyrights: "Map data ©2017 Google",
legs: [
{
arrival_time: {},
departure_time: {},
distance: {},
duration: {
text: "25 mins",
value: 1514
},
end_address: "destination address, Croatia",
end_location: {},
start_address: "start address",
start_location: {},
steps: [
{
distance: {},
duration: {},
end_location: {},
html_instructions: "Walk to Vjesnik",
polyline: {},
start_location: {},
steps: [],
travel_mode: "WALKING"
},
{
distance: {},
duration: {},
end_location: {},
html_instructions: "Tram towards Dubec",
polyline: {},
start_location: {},
transit_details: {
arrival_stop: {},
arrival_time: {},
departure_stop: {},
departure_time: {},
headsign: "Dubec",
line: {
agencies: [
{
name: "Zagrebački Električni Tramvaj",
phone: "011 385 60 100 001",
url: "http://www.zet.hr/"
}
],
color: "#ffffff",
name: "Savski most - Dubec",
short_name: "4",
text_color: "#400000",
vehicle: {}
},
num_stops: 9
},
travel_mode: "TRANSIT"
},
这是数组中的第一个路径,
我确实找到了一些代码但是我没有剪切这是正确的,我需要去
duration: {
text: "25 mins",
value: 1514
},
然后在步骤数组中,我需要对象transit_details女巫有2个对象行和num_stops,而在对象行中,我有对象:name,short_name和数组代理。
我不确定这是否是正确的代码形成我的情况,我已经意识到我需要得到两个数组,父母和孩子。 如果已经问过这个问题,我很抱歉,但是请您指导我如何获取这些数据?
我找到的Java代码是这样的,但我确实修改了它并发表了一些评论:
public class DirectionsJSONParser {
/** Receives a JSONObject and returns a list of lists containing latitude and longitude */
public List<List<HashMap<String,String>>> parse(JSONObject jObject){
List<List<HashMap<String, String>>> routes = new ArrayList<List<HashMap<String,String>>>() ;
JSONArray jRoutes = null;
JSONArray jLegs = null;
JSONObject jSteps = null;
try {
jRoutes = jObject.getJSONArray("routes");
/** Traversing all routes */
for(int i=0;i<jRoutes.length();i++){
jLegs = ( (JSONObject)jRoutes.get(i)).getJSONArray("legs");
List path = new ArrayList<HashMap<String, String>>();
/** Traversing all legs */
for(int j=0;j<jLegs.length();j++){
jSteps = ( (JSONObject)jLegs.get(j)).getJSONArray("steps");
jLegs = ((JSONObject)jRoutes.get(j)).getJSONArray("duration"); // --> this is my
/** Traversing all steps */
for(int k=0;k<jSteps.length();k++){
String polyline = "";
polyline = (String)((JSONObject)((JSONObject)jSteps.get(k)).get("polyline")).get("points");
List list = decodePoly(polyline);
jSteps = ((JSONObject)jSteps.get(k)).getJSONObject("transit_details"); // this is my
jSteps = ((JSONObject)jSteps.get(k)).getJSONObject("line"); // this is my
jSteps = ((JSONObject)jSteps.get(k)).getJSONObject("name"); // this is my
jSteps = ((JSONObject)jSteps.get(k)).getJSONObject("short_name"); // this is my
}
routes.add(path);
}
}
} catch (JSONException e) {
e.printStackTrace();
}catch (Exception e){
}
return routes;
}
/**
* Method to decode polyline points
* Courtesy : http://jeffreysambells.com/2010/05/27/decoding-polylines-from-google-maps-direction-api-with-java
* */
private List decodePoly(String encoded) {
List poly = new ArrayList();
int index = 0, len = encoded.length();
int lat = 0, lng = 0;
while (index < len) {
int b, shift = 0, result = 0;
do {
b = encoded.charAt(index++) - 63;
result |= (b & 0x1f) << shift;
shift += 5;
} while (b >= 0x20);
int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
lat += dlat;
shift = 0;
result = 0;
do {
b = encoded.charAt(index++) - 63;
result |= (b & 0x1f) << shift;
shift += 5;
} while (b >= 0x20);
int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
lng += dlng;
LatLng p = new LatLng((((double) lat / 1E5)),
(((double) lng / 1E5)));
poly.add(p);
}
return poly;
}
}
我没有得到我需要的数据。
感谢您的帮助。
答案 0 :(得分:0)
您可以使用gson之类的JSON-API来解析Java中的JSON数据
答案 1 :(得分:0)
好的我用gson获取数据,但是如何将它们放在列表视图中 我的代码是:
private void extractTransitDetails(TransitDetailsWrapper transitDetailsWrapper) {
List<Route> routes = transitDetailsWrapper.getRoutes();
routes.size();
for (Route route : routes) {
List<Leg> legs = route.getLegs();
route.getOverviewPolyline();
for (Leg leg : legs) {
List<Step> steps = leg.getSteps();
leg.getDuration(); // vrijeme putovanja
leg.getDistance(); // udaljenost u km
for (Step step : steps) {
TransitDetails transitDetails = step.getTransitDetails();
if (transitDetails != null) {
transitDetails.getLine();
if (transitDetails.getLine() != null) {
transitDetails.getLine().getShortName();
transitDetails.getLine().getName();
}
transitDetails.getNumStops();
transitDetails.getArrivalStop().getName();
transitDetails.getDepartureStop().getName();
transitDetails.getLine().getAgencies();
}
Log.d("test", "majlajs");
}
}
}
}