从谷歌 api 获取路线方向的请求如下。
DirectionsApi.newRequest(getGeoContext())
.mode(TravelMode.DRIVING)
.origin(origin)
.destination(destination)
.waypoints(getWaypointsString(waypoints))
.departureTime(now)
.optimizeWaypoints(true)
.await();
.waypoints 是一种具有可变参数数量的方法:
public DirectionsApiRequest waypoints(java.lang.String... waypoints)
现在我的问题是我将不得不动态更新我的路线,因此,我的路线中的航点数量可能会有所不同。我可以像这样手动处理:
.waypoints(Latlng1)
.waypoints("Latlng1","Latlng2")
无论如何,如果我不知道我会得到多少航点,我可以为此编写一个通用方法或如何处理它?
...
表示法只是传递数组的一种隐藏方式。 所以实际上waypoints
方法里面你有一个参数java.lang.String[] waypoints
,whis 是一个数组。因此,您可以找出它的长度并一一阅读其元素:
public DirectionsApiRequest waypoints(java.lang.String... waypoints) {
int numOfWayPoints = waypoints.length;
for (int i = 0 ; i < numOfWayPoints ; i++) {
doSomethingWithTheWayPoint(waypoints[i]);
}
// or
for (java.lang.String waypoint : waypoints) {
doSomethingWithTheWayPoint(waypoint);
}
}
要调用这样的方法,你可以反过来做:只需传递一个数组作为最后一个参数:
java.lang.String[] waypoints = {"Ltlng1", "Ltlng2"}; // fill the array
....
.waypoints(waypoints); // call the method, passing the array instead of a list of parameters
// or
ArrayList<java.lang.String> waypointsList = new ArrayList<>();
waypointsList.add("Ltlng1");
waypointsList.add("Ltlng2");
// etc
....
.waypoints(waypointsList.toArray(new java.lang.String[])); // call the method, passing the array of strings obtained from a list