使い方
- インストールコマンドをコピーし、自分の環境へ導入する前にソースを確認します。
- 必要なツール、認証情報、対応環境を原文で確認します。
- 入力と成果物を指定し、出力を資料と照合します。
npx skills add https://github.com/new-silvermoon/awesome-android-agent-skills --skill android-data-layer開始前の確認
- 導入にはモデル契約、API枠、ファイルへのアクセス許可は含まれません。
- スター数や導入数は活動の指標であり、独立した品質・安全性試験ではありません。
見出し、例、コード、表、リンク、参照画像を含む原文を表示しています。
Android Data Layer & Offline-First
Instructions
The Data Layer coordinates data from multiple sources.
1. Repository Pattern
- Role: Single Source of Truth (SSOT).
- Logic: The repository decides whether to return cached data or fetch fresh data.
- Implementation:
class NewsRepository @Inject constructor(
private val newsDao: NewsDao,
private val newsApi: NewsApi
) {
// Expose data from Local DB as the source of truth
val newsStream: Flow<List<News>> = newsDao.getAllNews()
// Sync operation
suspend fun refreshNews() {
val remoteNews = newsApi.fetchLatest()
newsDao.insertAll(remoteNews)
}
}2. Local Persistence (Room)
- Usage: Primary cache and offline storage.
- Entities: Define
@Entitydata classes. - DAOs: Return
Flow<T>for observable data.
3. Remote Data (Retrofit)
- Usage: Fetching data from backend.
- Response: Use
suspendfunctions in interfaces. - Error Handling: Wrap network calls in
try-catchblocks or aResultwrapper to handle exceptions (NoInternet, 404, etc.) gracefully.
4. Synchronization
- Read: "Stale-While-Revalidate". Show local data immediately, trigger a background refresh.
- Write: "Outbox Pattern" (Advanced). Save local change immediately, mark as "unsynced", use
WorkManagerto push changes to server.
5. Dependency Injection
- Bind Repository interfaces to implementations in a Hilt Module.
@Binds
abstract fun bindNewsRepository(impl: OfflineFirstNewsRepository): NewsRepository



