Как поймать "Не удалось десериализовать объект". исключение в 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, оно пропустит эту итерацию и перейдет к следующей.

Другие вопросы по тегам