Tugas Pertemuan 14 - REST API
Nama: Dewa Putu Ananda Taurean Mahesa
NRP: 5025231158
Kelas: Pemrograman Perangkat Bergerak C
1. Deskripsi
News App adalah aplikasi Android native yang menampilkan berita terkini. Aplikasi ini dibangun menggunakan antarmuka modern deklaratif serta memisahkan logika bisnis dari UI untuk memastikan performa yang cepat, stabil, dan kode yang mudah dikelola. Data berita ditarik secara real-time menggunakan REST API dari penyedia layanan pihak ketiga (NewsAPI).
2. Tech Stack
- Bahasa Pemrograman: Kotlin
- UI Toolkit: Jetpack Compose
- Arsitektur: MVVM (Model-View-ViewModel)
- Jaringan (Networking): Retrofit2 & Gson Converter
- Async Programming: Kotlin Coroutines & StateFlow
- Image Loading: Coil Compose
- Navigasi: Jetpack Navigation Compose
3. Struktur & Arsitektur
Proyek ini disusun menggunakan pola desain MVVM (Model-View-ViewModel) dengan pemisahan package (folder) berdasarkan fungsinya. Berikut adalah rincian dari setiap package dan file yang ada di dalam
com.example.newsapp:A. Package data (lapisan data)
Bagian ini bertanggung jawab atas seluruh komunikasi data, baik model data maupun pengambilan data dari internet.
- Article.kt: File data class yang memetakan objek tunggal dari sebuah berita (seperti judul, deskripsi, gambar, penulis, dan tanggal publikasi) agar sesuai dengan format JSON dari NewsAPI.
- NewsResponse.kt: File data class yang membungkus keseluruhan respons JSON dari server, yang di dalamnya memuat status panggilan dan daftar dari
Article. - ApiService.kt: Interface yang mendefinisikan endpoint API jaringan. Di sini terdapat fungsi
GETuntuk mengambil "Top Headlines" beserta parameter kueri (query parameters) seperti negara dan API Key. - RetrofitClient.kt: File konfigurasi atau singleton object untuk membangun instance Retrofit, menetapkan
BASE_URL, dan memasang Gson Converter untuk menerjemahkan JSON ke objek Kotlin. - NewsRepository.kt: Kelas perantara (abstraksi) yang dipanggil oleh ViewModel. File ini bertugas mengeksekusi panggilan fungsi dari
RetrofitClientmenggunakan API Key otentikasi.
B. Package viewmodel (lapisan logika bisnis)
Bagian ini bertindak sebagai jembatan antara antarmuka (UI) dan lapisan data.
- NewsUiState.kt: Kelas sealed yang merepresentasikan tiga kemungkinan status UI pada aplikasi:
Loading(sedang memuat data),Success(berhasil memuat daftar berita), danError(gagal memuat data beserta pesan kesalahannya). - NewsViewModel.kt: Pusat kendali logika aplikasi. Kelas ini meminta data dari
NewsRepositorydi dalam proses latar belakang (background thread) menggunakan Kotlin Coroutines, lalu memancarkan (emit) hasilnya ke UI menggunakanStateFlow. File ini juga menyimpan status artikel mana yang sedang diklik untuk dikirim ke halaman detail.
C. Package UI (lapisan antarmuka)
Bagian ini murni berisi kode Jetpack Compose untuk menggambar tampilan di layar, tanpa mencampuri logika pengambilan data.
- NewsCard.kt: Berisi Reusable Composables (komponen UI yang bisa dipakai berulang). Di dalamnya terdapat fungsi
HeadlineCarduntuk desain berita utama bergambar besar, danNewsCarduntuk desain baris berita vertikal yang lebih ringkas. - HomeScreen.kt: Komponen layar beranda yang menampilkan Header aplikasi dan daftar berita menggunakan
LazyColumn. File ini mengamati (meng-observe) status dariNewsUiStateuntuk menampilkan indikator loading, daftar berita, atau tombol retry jika error. - DetailScreen.kt: Komponen layar yang menampilkan isi detail berita secara penuh ketika salah satu card di layar beranda ditekan.
D. Package Navigation dan File Utama (entry point)
Bagian ini mengatur perpindahan antar layar dan inisialisasi awal aplikasi.
- NavGraph.kt: Pusat pengatur rute aplikasi menggunakan
NavHost. File ini mendefinisikan halaman "home" dan halaman "detail", serta meneruskan instanceNewsViewModelagar state antar layar tetap tersinkronisasi. - MainActivity.kt: Titik awal (entry point) aplikasi Android berjalan. File ini memanggil tema bawaan aplikasi (
MaterialTheme) dan memuatAppNavGraph()ke dalam layar perangkat.
4. Fitur Utama
- Tampilan beranda (Home Screen): Menampilkan daftar berita dalam dua format: Headline Card (berita utama dengan gambar besar di atas) dan daftar Breaking News (berita vertikal dengan thumbnail di samping).
- Tampilan detail (Detail Screen): Menampilkan informasi spesifik dari sebuah artikel secara lengkap (Gambar, Judul, Kategori, Tanggal, Deskripsi) dengan navigasi kembali (Back Button).
- Penanganan status (State Handling): Dilengkapi dengan indikator pemuatan (Loading), penampil data (Success), dan penampil pesan kegagalan yang interaktif dengan tombol "Retry" (Error).
Comments
Post a Comment