Исключение IllegalArgumentException в случайном порядке

#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.