Я получил отчет об ошибке, которое составляет около 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));
.
Первым шагом является публикация здесь stacktrace и указание нам, какая строка исключает исключение. Так что мы можем видеть, что на самом деле происходит неправильно – jboi
Авария вызвана 'char key = GB2Alpha.Char2Alpha (word.charAt (0));' – user2872856
И это GB2Alpha.java: http://code.google.com/ p/zhuang-dict/source/browse/trunk/ZhuangDict/src/cn/wangdazhuang/dict/util/GB2Alpha.java? r = 21 – user2872856