Как поймать "Не удалось десериализовать объект". исключение в Java (Android)?
Допустим, я конвертирую большую коллекцию данных с сервера в пользовательские локальные объекты Java. POJO имеет переменную int, которую я ожидаю получить от сервера. Только, скажем, некоторые данные перечисляют число в виде строки вместо целого числа. У меня есть для цикла, настроенного как:
for (Object document : DataSentFromServer) {
MyObjectClassArrayList.add(document.toObject(MyObject.class));
}
Таким образом, для 99% документов int имеет тип int, а один - String. Таким образом, когда цикл for достигает этого документа, он выбрасывает java.lang.RuntimeException: Could not deserialize object. Failed to convert a value of type java.lang.String to int
Я знаю, что мне нужно обновить данные на сервере, я уже сделал это, чтобы решить эту проблему.
Мой вопрос: как я могу создать блок catch или что-то, что будет просто пропускать документы с сервера, которые не соответствуют модели данных моего класса объектов? Поскольку я не хочу, чтобы мои клиентские приложения зависали, если что-то не так с данными сервера.
2 ответа
Просто окружите функцию блоком try catch:
for (Object document : DataSentFromServer) {
try{
MyObjectClassArrayList.add(document.toObject(MyObject.class));
}catch(RuntimeException e){
//do something with the bad data if you wish.
}
}
Небольшое обновление @Marksim Новиков ответ.
for (Object document : DataSentFromServer) {
try{
MyObjectClassArrayList.add(document.toObject(MyObject.class));
}catch(RuntimeException e){
//continue will skip the current iteration and go to next iteration
continue;
}
}
Итак, если вы столкнетесь с исключением Runtime, оно пропустит эту итерацию и перейдет к следующей.