1

私は理解できないように見える単純な問題を抱えています。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 で終日実行されます。何が間違っている可能性があるかについてのアイデアはありますか?

4

3 に答える 3

0

これは、2.2 以降に修正された android 2.1 のこのバグが原因です。geonames クライアント ライブラリを使用して同じ問題が発生しました。この問題を解決するには、JDOM のこのフォークを使用します。

于 2011-07-05T01:44:06.900 に答える
0

部分文字列関数をどこかで呼び出していますか? このエラーは、存在しない部分文字列インデックス (たとえば、string.length() よりも大きいインデックス) を読み取ろうとしていることを示しているようです。

于 2011-01-23T20:30:13.013 に答える
0

わかりました、問題は解決しました。根本的な原因はわかりませんが、AVD 2.1 を実行していました。この AVD を削除し、Android サイトから最新の AVD をリロードして、新しい AVD 2.3 を作成しました。初めて試したときにアプリケーションが実行されました!この問題を閲覧したり、解決策を提供したりしたすべての人に感謝します。

于 2011-01-25T03:29:16.653 に答える