2011-01-23 4 views
1

私にはわかりにくいという単純な問題があります。私はgeoname WebService.searchメソッドを実行しようとしており、 "java.lang.StringIndexoutOfBoundsException"エラーが発生し続けます。私は普通の古いJavaの下でプログラムを走らせました。問題なく正常に動作します。私はAndroidの下でそれを実行し、私は "java.lang.StringIndexoutOfBoundsException"エラーを取得します。自分のマニフェストに「インターネット」権限が設定されています。このエラーは、Webservice.search(searchCriteria)が実行されたときに発生します。Androidでgeonamesを実行しているOutofBoundsException

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()); 
     } 
    } 
} 

Iは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

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

+0

いいえ、少なくとも私はそうは思わない。このエラーは、WebService.searchメソッドが実行されたときに発生します。以前のように、Java SE6では動作しますが、Androidでは動作しません。また、WebServiceクラス内でWebService.postalCodeSearch()やWebService.weatherIaco()のように異なるメソッドを取得することもできます。 –

+0

それはあなたが必要なものではなく、Androidの別のクラスからWebサービスが使用されているような愚かなものかもしれませんか?たぶんフルネームを使っているかもしれません(私はそのコードを知りません、 'org.geonames.webservice()'のようなものであると推測しています)それは本当に野生の推測ですが、他にはあまり知らないでしょう:) – Nanne

+0

org.goenames.WebService.search()を試しましたが、運がありませんでした。ソースから始める以外に、ここから何をすべきか分からない。 geonamesはそこに.jarのソースを提供しました。あなたの提案をありがとう。 –

0

問題を解決しました。根本原因が何であるかわからないけど、私は走っていてAVD 2.1です。私はこのAVDを削除し、Androidサイトから最新のAVDをリロードし、新しいAVD 2.3を作成しました。私が試したのは初めてのアプリケーションでした!この問題を見たか解決策を提示したすべての人に感謝します。

0

これは、2.2以降に修正されたandroid 2.1のバグthisによって引き起こされます。私はgeonamesクライアントライブラリを使用して同じ問題を経験しました。問題を解決するには、JDOMのthisフォークを使用してください。

関連する問題