Android 方向 API ArrayIndexOutOfBoundsException
Android Directions API ArrayIndexOutOfBoundsException
我正在使用 Google 路线 API。一切正常,直到我将 TravelMode 设置为 BICYCLING。
在设置此属性之前,所有其他模式都有效。
我得到的错误是:onFailure: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
为什么会出现此错误?
代码如下:
private void calculateDirections(Marker marker){
Log.d(TAG, "calculateDirections: calculating directions.");
com.google.maps.model.LatLng destination = new com.google.maps.model.LatLng(
marker.getPosition().latitude,
marker.getPosition().longitude
);
DirectionsApiRequest directions = new DirectionsApiRequest(mGeoApiContext);
directions .alternatives(true)
.origin(new com.google.maps.model.LatLng(
deviceLocation.getLatitude(),
deviceLocation.getLongitude()));
// Set imperial and transport mode
try {
if (imperial) {
directions.units(Unit.IMPERIAL);
Log.d(TAG, "calculateDirections: imperial set true");
}
switch (transportMode){
case "Drive":
directions.mode(TravelMode.DRIVING);
Log.d(TAG, "calculateDirections: travelMode: " + transportMode);
break;
case "Walk":
directions.mode(TravelMode.WALKING);
Log.d(TAG, "calculateDirections: travelMode: " + transportMode);
break;
case "Transit":
directions.mode(TravelMode.TRANSIT);
Log.d(TAG, "calculateDirections: travelMode: " + transportMode);
break;
case "Cycle":
directions.mode(TravelMode.BICYCLING);
Log.d(TAG, "calculateDirections: travelMode: " + transportMode);
break;
}
} catch (Exception e){
Log.e(TAG, "calculateDirections: imperial error: " + e.getMessage());
}
Log.d(TAG, "calculateDirections: destination: " + destination.toString());
directions.destination(destination).setCallback(new PendingResult.Callback<DirectionsResult>() {
@Override
public void onResult(DirectionsResult result) {
Log.d(TAG, "calculateDirections: onResult: routes: " + result.routes[0].toString());
Log.d(TAG, "calculateDirections: onResult: duration: " + result.routes[0].legs[0].duration);
Log.d(TAG, "calculateDirections: onResult: distance: " + result.routes[0].legs[0].distance);
Log.d(TAG, "calculateDirections: onResult: geocodedWayPoints: " + result.geocodedWaypoints[0].toString());
addPolyLinesToMap(result);
}
@Override
public void onFailure(Throwable e) {
Log.e(TAG, "calculateDirections: onFailure: " + e );
}
});
}
绝对是因为没有适合该出行方式的路线(根据Google方向Api)。使用前必须检查 result.routes
是否为 null。
public void onResult(DirectionsResult result) {
if (result.routes!=null&&result.routes.length>0){
//draw polylines
} else{
//no route found
}
}
我正在使用 Google 路线 API。一切正常,直到我将 TravelMode 设置为 BICYCLING。 在设置此属性之前,所有其他模式都有效。
我得到的错误是:onFailure: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
为什么会出现此错误?
代码如下:
private void calculateDirections(Marker marker){
Log.d(TAG, "calculateDirections: calculating directions.");
com.google.maps.model.LatLng destination = new com.google.maps.model.LatLng(
marker.getPosition().latitude,
marker.getPosition().longitude
);
DirectionsApiRequest directions = new DirectionsApiRequest(mGeoApiContext);
directions .alternatives(true)
.origin(new com.google.maps.model.LatLng(
deviceLocation.getLatitude(),
deviceLocation.getLongitude()));
// Set imperial and transport mode
try {
if (imperial) {
directions.units(Unit.IMPERIAL);
Log.d(TAG, "calculateDirections: imperial set true");
}
switch (transportMode){
case "Drive":
directions.mode(TravelMode.DRIVING);
Log.d(TAG, "calculateDirections: travelMode: " + transportMode);
break;
case "Walk":
directions.mode(TravelMode.WALKING);
Log.d(TAG, "calculateDirections: travelMode: " + transportMode);
break;
case "Transit":
directions.mode(TravelMode.TRANSIT);
Log.d(TAG, "calculateDirections: travelMode: " + transportMode);
break;
case "Cycle":
directions.mode(TravelMode.BICYCLING);
Log.d(TAG, "calculateDirections: travelMode: " + transportMode);
break;
}
} catch (Exception e){
Log.e(TAG, "calculateDirections: imperial error: " + e.getMessage());
}
Log.d(TAG, "calculateDirections: destination: " + destination.toString());
directions.destination(destination).setCallback(new PendingResult.Callback<DirectionsResult>() {
@Override
public void onResult(DirectionsResult result) {
Log.d(TAG, "calculateDirections: onResult: routes: " + result.routes[0].toString());
Log.d(TAG, "calculateDirections: onResult: duration: " + result.routes[0].legs[0].duration);
Log.d(TAG, "calculateDirections: onResult: distance: " + result.routes[0].legs[0].distance);
Log.d(TAG, "calculateDirections: onResult: geocodedWayPoints: " + result.geocodedWaypoints[0].toString());
addPolyLinesToMap(result);
}
@Override
public void onFailure(Throwable e) {
Log.e(TAG, "calculateDirections: onFailure: " + e );
}
});
}
绝对是因为没有适合该出行方式的路线(根据Google方向Api)。使用前必须检查 result.routes
是否为 null。
public void onResult(DirectionsResult result) {
if (result.routes!=null&&result.routes.length>0){
//draw polylines
} else{
//no route found
}
}