Загрузка данных


Цель и задачи

Освоить сетевой слой Android-приложения: научиться описывать REST API через Retrofit, настраивать OkHttp с интерсепторами и таймаутами, обрабатывать сетевые ошибки через sealed interface NetworkResult, объединять сетевые запросы с локальным хранилищем и реализовать паттерн offline-first. В качестве бэкенда используется публичный API JSONPlaceholder.

Что сделано

1. Добавлены зависимости Retrofit, Moshi, OkHttp logging-interceptor.
2. Создан NoteDto — DTO для ответа сервера.
3. Создан NoteApi — Retrofit-интерфейс с 5 методами.
4. Создан NetworkResult — sealed interface + safeApiCall.
5. Создан RetrofitService — Singleton с OkHttp, Moshi и Retrofit.
6. Создан SyncedNotesRepository — репозиторий с сетью и in-memory кэшем.
7. Обновлён NotesViewModel — добавлен метод refresh() с флагом isRefreshing.
8. Обновлён NotesListScreen — иконка Refresh в TopAppBar и Snackbar по результату.

Вывод

Освоен сетевой слой: Retrofit для описания REST API, OkHttp для транспорта с интерсепторами и таймаутами, Moshi для парсинга JSON. Использован sealed interface NetworkResult вместо try-catch в каждом вызове — обработка ошибок централизована в safeApiCall. Освоена обработка двух типов ошибок: HttpException (серверная ошибка с кодом) и IOException (нет сети). Реализован паттерн offline-first: UI читает из локального StateFlow, а Repository синхронизирует данные с сервером. Важный момент — разрешение INTERNET в AndroidManifest.xml; без него приложение падает с SecurityException при первой попытке сетевого запроса.