Переполнение JNI, когда hashmap> 512 - PullRequest
3 голосов
/ 25 апреля 2011

Используя файл ресурса, я создаю большую хэш-карту

HashMap<String, String> bigHash = new HashMap<String, String>();
public void createHash(){
    String [] items = getResources().getStringArray(R.array.dual_strings);
    String [] temp;
    for ( String s : items ){
        temp = s.split("@");
        bigHash.put(temp[0],temp[1]);
    }
}

dual_string.xml, заполненную записями типа «Сон @ Лучше спать больше 6 часов в день»

Однако,Я попытался с большим (~ 1000 элементов) файлом dual_strings.xml и приложение сразу после запуска вылетает.Глядя на LogCag "dalvikvm не удалось добавить в локальную таблицу ссылок JNI (имеет 512 записей)"

Могу ли я что-нибудь сделать, чтобы создать и использовать большой хэш из моего длинного файла ресурсов?Спасибо

1 Ответ

2 голосов
/ 25 апреля 2011

Это похоже на ошибку в нативном коде Android для getStringArrayResources.Я обнаружил, что в этом уже есть ошибка.Причину этого легко увидеть в собственном коде (ссылка создается в цикле, но не очищается).

http://code.google.com/p/android/issues/detail?id=5287&q=getArrayStringResource&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars

На данный момент вам придется обойти эту ошибку.Вам придется разбить массив строк на более мелкие куски по <500 строк каждый или написать свой собственный метод загрузки массива строк.Возможно, кто-то еще может предложить более хорошее решение. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...