OutofBoundsException запуск геонаимен на Android - PullRequest
1 голос
/ 23 января 2011

У меня есть простая проблема, которую я не могу понять. Я пытаюсь выполнить метод 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. Есть идеи, что может быть не так?

Ответы [ 3 ]

0 голосов
/ 25 января 2011

Хорошо, проблема решена.Не уверен, в чем причина, но я работал и AVD 2.1.Я удалил этот AVD и перезагрузил последний AVD с сайта Android и создал новый AVD 2.3.Приложение запустилось в первый раз, когда я попробовал!Спасибо всем, кто рассматривал эту проблему или предлагал решения.

0 голосов
/ 05 июля 2011

Это вызвано этой ошибкой в ​​Android 2.1, которая была исправлена ​​с 2.2. Я столкнулся с той же проблемой при использовании клиентской библиотеки geonames. Для решения проблемы используйте этот форк JDOM.

0 голосов
/ 23 января 2011

Вы вызываете функцию подстроки где-нибудь?Кажется, ошибка означает, что вы пытаетесь прочитать индекс подстроки, который не существует (индекс, например, больше, чем string.length ()).

...