android - Android 中的 StringIndexOutOfBoundsException

标签 android

我收到以下错误:

    java.lang.StringIndexOutOfBoundsException: length=13243; regionStart=32; regionLength=-39
    at java.lang.String.startEndAndLength(String.java:593)
    at java.lang.String.substring(String.java:1474)
    at com.dict.XMLParser.getResultFromXML(XMLParser.java:63)
    at com.dict.InternetDictProvider.searchWord(InternetDictProvider.java:29)
    at com.dict.SearchDict$SearchOnline.doInBackground(SearchDict.java:130)
    at com.dict.SearchDict$SearchOnline.doInBackground(SearchDict.java:1)
    at android.os.AsyncTask$2.call(AsyncTask.java:264)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
    at java.lang.Thread.run(Thread.java:856)

在以下代码中,通常在解析作为 HttpGet 的 HttpResponse 给出的 XML 页面后获取结果:

        retry:
        {
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpGet httpGet = new HttpGet("http://oxforddictionaries.com/definition/"+query+"?q="+query);
            HttpResponse httpResponse = httpClient.execute(httpGet);
            HttpEntity httpEntity = httpResponse.getEntity();
            String meanings=parser.getResultFromXML(StringUtils.inputStreamToString(httpEntity.getContent()));
            if(meanings==null && firstRetry)
            {
                firstRetry=false;
                query = query.substring(0, 1).toUpperCase() + query.substring(1);
                break retry;
            }
            else if(meanings==null && !firstRetry)
                return query;
            result = query + ":" + meanings;
        }

最佳答案

 query = query.substring(0, 1).toUpperCase() + query.substring(1);

我认为这个语句会创建异常,所以使用 if(null!=query&&query.length()!=0){query=...}

如果您对字符串进行子串在您的情况下长度超过 1

关于android - Android 中的 StringIndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9781802/

相关文章:

android - 如何覆盖android.R.layout.simple_list_item_multiple_choice的样式?

Android: 无法注册 BroadcastReceiver

android - 项目升级到gradle后无法编译 :2. 1.0-alpha5

javascript - 我可以从 android 共享首选项获取网络浏览器内的数据吗?

android - WIFI_SLEEP_POLICY_NEVER 如何在 API-17 中设置?

android - fatal error (使用 theme.appcompat),即使我使用的是 AppCompat 主题

android - getResources().getDrawable 返回 NULL

java - 如何获取Android手机的Radio类型(GSM,CDMA,WCDMA,LTE)

android - 移动客户端上的 Google Analytics

android - 使用 FMOD 保存输出而不播放