2013-11-11 26 views
0

Я получил отчет об ошибке, которое составляет около java.lang.StringIndexOutOfBoundsException in ZhuangDictActivity$SearchDicAsyncTask.doInBackgroundРешение StringIndexOutOfBoundsException

Вот ZhuangDictActivity $ SearchDicAsyncTask.doInBackground:

private class SearchDicAsyncTask extends AsyncTask<String, Integer, String> { 

     private byte searchStatus; 

     @Override 
     protected String doInBackground(String... params) { 
      if (params[0].length() > 0) { 
       word = params[0].trim(); 
       long[] index = null; 

       FileAccessor in = null; 
       DictZipInputStream din = null; 
       try { 

        char key = GB2Alpha.Char2Alpha(word.charAt(0)); 
        tableName = DatabaseHelper.transTableName(key); 

        index = databaseHelper.queryTable(tableName, word); 

        if (index != null) { 
         in = new FileAccessor(new File(dictFileName), "r"); 
         byte[] bytes = new byte[(int) index[1]]; 
         if (isDZDict) { 
          din = new DictZipInputStream(in); 
          DictZipHeader h = din.readHeader(); 
          int idx = (int) index[0]/h.getChunkLength(); 
          int off = (int) index[0] % h.getChunkLength(); 
          long pos = h.getOffsets()[idx]; 
          in.seek(pos); 
          byte[] b = new byte[off + (int) index[1]]; 
          din.readFully(b); 
          System.arraycopy(b, off, bytes, 0, (int) index[1]); 
         } else { 
          in.seek(index[0]); 
          in.read(bytes); 
         } 

         wordDefinition = new String(bytes, "UTF-8"); 
        } else { 
         searchStatus = 0; 
         return null; 
        } 
       } catch (FileNotFoundException ffe) { 
        searchStatus = 1; 
        return null; 
       } catch (IOException ex) { 
        ex.printStackTrace(); 
        searchStatus = 2; 
        return null; 
       } finally { 
        try { 
         if (din != null) 
          din.close(); 
         if (in != null) 
          in.close(); 
        } catch (IOException ex) { 
         ex.printStackTrace(); 
        } 
       } 

      } 
      return wordDefinition; 
     } 
    } 

Полный код доступен here. Я имею ограниченные знания в разработке Java и Android. Как мне это решить? Я намеревался опубликовать полные трассировки стека, но stackoverflow не позволяет мне это делать, потому что он заявил, что мой вопрос имеет слишком много кода. В любом случае, строка, вызывающая проблему, - char key = GB2Alpha.Char2Alpha(word.charAt(0));.

+4

Первым шагом является публикация здесь stacktrace и указание нам, какая строка исключает исключение. Так что мы можем видеть, что на самом деле происходит неправильно – jboi

+0

Авария вызвана 'char key = GB2Alpha.Char2Alpha (word.charAt (0));' – user2872856

+0

И это GB2Alpha.java: http://code.google.com/ p/zhuang-dict/source/browse/trunk/ZhuangDict/src/cn/wangdazhuang/dict/util/GB2Alpha.java? r = 21 – user2872856

ответ

0

Возможно, что ваша строка содержит только пробелы. означает, что он принял условие:

if (params[0].length() > 0) 

Но когда вы звоните накладку(), они будут удалены, в результате чего в пустом потоке и «IndexOutOfBoundsException» выбросу исключения при выполнении:

word.charAt(0) 

EDIT

Это не повод. После теста, когда обрезка вызывается в строке с только пробелами, строка остается неизменной.

Смежные вопросы