我有一个简单的问题,我似乎无法弄明白。我正在尝试执行geoname WebService.search方法并不断收到“java.lang.StringIndexoutOfBoundsException”错误。我在普通的旧Java下运行该程序,它运行正常,没有任何问题。我在Android下运行它,我得到“java.lang.StringIndexoutOfBoundsException”错误。我的清单中设置了“Internet”权限。执行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)
....
我已经在我的Java构建路径中正确放置了jdom.jar和geonames.-1.0.6.jar,所以我认为那里没有问题。有趣的是,重新编写代码以使用WebService.postalCodeSearch(postalSearch)和WebService.weatherIcao(“KPBI”),它在Android中完美运行,没有任何问题。就像我说的,这段代码在Java SE6下全天运行。关于可能出错的任何想法?
答案 0 :(得分:0)
你在某个地方调用子串函数吗?该错误似乎意味着您正在尝试读取不存在的子字符串索引(索引比例如string.length()更大)。
答案 1 :(得分:0)
好的,问题解决了。不确定根本原因是什么,但我正在运行和AVD 2.1。我删除了这个AVD并从Android站点重新加载了最新的AVD并创建了一个新的AVD 2.3。该应用程序在我第一次尝试时运行!感谢所有观看此问题或提供解决方案的人。
答案 2 :(得分:0)