You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Для получения Worker-а ты кастишь приложение к интерфейсу. Для получения Storage-а -- почему-то нет. Предлагаемое решение: приложение реализует интерфейс ModelProvider, который объявляет get-методы для тех моделей, что тебе необходимы.
AnimalStorage:
Уведомление об изменении контента происходит (внезапно) в read-методе.
DataBaseLoaderFunctions:
Ты совершаешь операции над животными -- и почему-то константы имеют суффикс USER.
SQLiteAnimalsDao:
Минорное замечание: оптимальней и безопасней прописывать раздельно selection и selectionArgs. ОК, тут повезло -- тут только айдишник. Завтра будет строка -- и простор для SQL-инъекции.
У тебя тип животного хранится как string (enumValue.toString()). Такое решение оказывается нестойким к обфускации. Предпочтительней enum-ы хранить как int-ы (enumValue.ordinal()).
AddNewAnimalActivity:
Название не указывает, что в активити может происходить редактирование животного.
Неожиданная и нестойкая логика определения режима "редактируемости" -- по наличию extras в интенте. Завтра тебе потребуется extra-информация в режиме добавления -- и логика поломается.
Нет смысла заводить переменную cachedAnimals только для того, чтоб её постоянно редактировать, не считывая после этого информацию (считываешь с неё информацию только 1 раз -- при вычитке Animal из интента).
DataBaseWorker:
При уведомлении у тебя может возникнуть состояние гонки. Во-первых, cachedData может измениться не только в loadUsers(). Во-вторых, одновременная запись и чтение callbackWeakReference из разных тредов может вызвать ошибку. В том числе, метод коллбэка onLoadFinished() может вызваться уже после того, как твой активити проставил слушатель null и уничтожился.
AnimalsInfoApplication
AnimalStorage:
DataBaseLoaderFunctions:
SQLiteAnimalsDao:
AddNewAnimalActivity:
DataBaseWorker: