У меня есть простая проблема, которую я не могу понять. Я пытаюсь выполнить метод geoname WebService.search и получаю сообщение об ошибке «java.lang.StringIndexoutOfBoundsException». Я запустил программу под старой Java, и она работает без проблем. Я запускаю его под Android и получаю ошибку «java.lang.StringIndexoutOfBoundsException». В моем манифесте установлены разрешения «Интернет». Ошибка возникает при выполнении Webservice.search (searchCriteria). Вот код:
package fau.edu;
import org.geonames.*;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class MainRoutine extends Activity {
TextView displayObject;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
displayObject = (TextView)findViewById(R.id.TextView01);
try {
String displayString;
//
// Toponomy Search
//
ToponymSearchCriteria searchCriteria = new ToponymSearchCriteria();
searchCriteria.setQ("Miami");
searchCriteria.setFeatureClass(FeatureClass.valueOf("H"));
searchCriteria.setCountryCode("US");
searchCriteria.setAdminCode1("FL");
searchCriteria.setFeatureCode("spng");
WebService.setUserName("******"); // username '*' out for public consumption. Actual code has valid name.
ToponymSearchResult searchResult = WebService.search(searchCriteria);
displayString = null;
for (Toponym toponym : searchResult.getToponyms()) {
displayString += toponym.getName() + " " + toponym.getCountryName() + "\n";
}
displayObject.setText(displayString);
}
catch(Exception e) {
e.printStackTrace();
displayObject.setText("Try Error...\n" + e.toString());
}
}
}
Ошибка возникает, когда я выполняю метод WebService.search (searchCriteria). Ошибка, которую я получаю в LogCat:
java.lang.StringIndexOutOfBoundsException
at java.lang.String.substring(String.java:1646
at org.jdom.input.SAXHandler.startElement(SAXHandler.java:568)
at org.apache.harmony.xml.ExpatParser.startElement(ExpartParser.java:146)
....
Я правильно поместил jdom.jar и geonames.-1.0.6.jar в мой путь сборки Java, поэтому я не думаю, что там есть проблема. Интересно то, что переписали код для использования WebService.postalCodeSearch (postalSearch) и WebService.weatherIcao («KPBI»), и он прекрасно работает в Android без проблем. Как я уже сказал, этот код работает весь день под Java SE6. Есть идеи, что может быть не так?