1

我有一个简单的问题,我似乎无法弄清楚。我正在尝试执行 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)
     ....

我已经正确地将 jdom.jar 和 geonames.-1.0.6.jar 放在我的 Java 构建路径中,所以我认为那里没有问题。有趣的是,它重新编写了使用 WebService.postalCodeSearch(postalSearch) 和 WebService.weatherIcao("KPBI") 的代码,它在 Android 中完美运行,没有任何问题。就像我说的,这段代码在 Java SE6 下运行一整天。关于什么可能是错的任何想法?

4

3 回答 3

0

你在某处调用子字符串函数吗?该错误似乎暗示您正在尝试读取不存在的子字符串索引(例如大于 string.length() 的索引)。

于 2011-01-23T20:30:13.013 回答
0

这是由android 2.1 中的这个错误引起的,该错误自 2.2 以来已被修复。我在使用 geonames 客户端库时遇到了同样的问题。要解决此问题,请使用JDOM 分支。

于 2011-07-05T01:44:06.900 回答
0

好的,问题解决了。不确定根本原因是什么,但我正在运行 AVD 2.1。我删除了这个 AVD 并从 Android 站点重新加载了最新的 AVD 并创建了一个新的 AVD 2.3。该应用程序在我第一次尝试时运行!感谢所有查看此问题或提供解决方案的人。

于 2011-01-25T03:29:16.653 回答