#java #android
Вопрос:
Вот мое исключение caused by: java.lang.illegalargumentexception: at java.util.random.nextint (random.java:388).
У меня есть приложение в play market, и после того, как я добавил Gson в приложение, стали поступать сбои, но редко 5 в неделю. Я установил ProGuard, все настройки gson он указал. Протестировано на большом количестве устройств, и никогда у меня не было исключений. У меня есть список, в котором я записываю JSON, а затем этот список передается случайным образом.nextInt. Я прочитал в документации на random, что исключение illegalargumentexception вылетает при передаче метода с отрицательным значением, поэтому, когда я читаю данные, в списке ничего не записывается. Если в gson произошла ошибка, я попал в исключение в gson, я правильно понимаю? Я думаю, что главная проблема заключается в чтении JSON. Мой файл JSON содержит массив из 500 объектов. questionsFromJson.size() никогда не должен быть равен 0. Мне нужно решить проблему, почему GSON возвращает 0 элементов, но если 500, я не могу воссоздать эту ошибку для себя, я не знаю, как ее исправить.
questionsFromJson = getQuestionsFromJson(R.raw.ru, context);
for (int i = 0; i < QUESTIONS_SIZE; i ){
int index = random.nextInt(questionsFromJson.size());
int imageId = context.getResources().getIdentifier(questionsFromJson.get(index).getImage().replace(".png", "") , "drawable", packageName);
questionsFromJson.get(index).setImageId(imageId);
questions.add(questionsFromJson.remove(index));
}
private ArrayList<Question> getQuestionsFromJson(int id, Context context){
ArrayList<Question> resu<
Gson gson = new GsonBuilder().setPrettyPrinting().create();
Type dtoListType = new TypeToken<List<Question>>(){}.getType();
Reader reader = new InputStreamReader(context.getResources().openRawResource(id));
result = gson.fromJson(reader, dtoListType);
try {
reader.close();
} catch (IOException e) {
}
return resu<
}
Ответ №1:
nextInt()
создает исключение для значений <= 0
, а не только для отрицательных.
Ваш for
цикл не учитывает размер questionsFromJson
коллекции и questionsFromJson.size()
может стать 0
.
Рассмотрите возможность изменения, например i < QUESTIONS_SIZE
, условия на, например i < QUESTIONS_SIZE amp;amp; questionsFromJson.size() > 0
.
Комментарии:
1. Да, так и есть. Мой файл json содержит массив из 500 объектов.
questionsFromJson.size()
никогда не должно быть 0. Мне нужно решить проблему, почему GSON возвращает 0 элементов, но должен возвращать 500.