Эта ошибка возникает из метода подстроки, и я нашел много потоков, связанных с этой проблемой, но проблема, с которой я сталкиваюсь, по-видимому, отличается. Я понимаю, что она выкинет эту ошибку, если ваша строка короче, чем подстроки (начало, конец) размер, но эта ошибка возникает, прежде чем что-либо еще передается в вызов методаObscure 'StringIndexOutOfBoundsException "
Я бег критерия Спящего.
public static List<Object[]> baseQuery() throws HibernateException{
Session session = getSession();
Criteria criteria = session.createCriteria(CsvDataEntity.class);
ProjectionList projectionList = Projections.projectionList();
projectionList.add(Projections.property("clearanceMainCat"));
projectionList.add(Projections.property("clearanceDt"));
projectionList.add(Projections.property("vertRadians"));
projectionList.add(Projections.property("latitude"));
criteria.setProjection(projectionList);
List<Object[]> list = criteria.list();
return list;
}
Тогда я м, используя запрос здесь:
List<Object[]> fullList = baseQuery();
String address = "400 Pine St, Seattle, WA 98101";
String distance = "1";
String years = "8";
//create 'context' for GoogleMaps GeoCode API, geocode user-defined address
GeoApiContext context = new GeoApiContext().setApiKey("Foobar");
GeocodingResult[] result = geocode(context, address).await();
Geometry coordinates = result[0].geometry;
//store user request lat & lng from address supplied from form
double longitude = coordinates.location.lng;
double latitude = coordinates.location.lat;
//user requested distance
double requestedDistanceInMiles = Double.parseDouble(distance);
//list to store all the crimes within the specified distance
List<CrimeModel> crimeList = new ArrayList<>();
for (Object[] record : fullList) {
//verifying crime was commmitted within user-defined distance
Boolean withinDistance = false;
double rowLng = Double.parseDouble((String)record[2]);
double rowLat = Double.parseDouble((String)record[3]);
double milesBetween = (haversineDistance(latitude,rowLat,longitude,rowLng,0,0))/1609.34;
if (milesBetween <= requestedDistanceInMiles) {
withinDistance = true;
}
//verifying crime was committed within user-defined time-range
Boolean withinTimeRange =false;
double requestedYears = Double.parseDouble(years);
long requestedDays = Math.round(requestedYears * 365);
String objectDate = (String) record[1];
String recordDateAsString = objectDate.substring(0, 10);
Запрос работает, и он возвращает строку даты + времени, которая, конечно, более десяти символов. Странно, я поставил точку останова в строке 4, отлаживался, запрос выполнялся нормально, но затем он выдает ошибку для пути вниз в нижней части отрывка, который я разместил там, где вызывается substring(). Другими словами, моя строка должна иметь необходимую длину, но даже до этой ошибки она не передается. Кто-нибудь знает, почему это было бы брошено, если оно даже не было выполнено? Я запускаю это в Spring MVC, это единственное, что я могу придумать, что может привести к какой-то странной ситуации. Благодарю.
Пожалуйста, добавьте ваш стек. И помимо вашей проблемы с ошибкой: прочитайте о принципе ** одного слоя абстракции **. Ваш код может выиграть от этого. О, очень. – GhostCat
Не могли бы вы вывести значения ** fullList **? –
Пожалуйста, опубликуйте значение 'objectDate' –