Tugas Pertemuan 14 - REST API

Nama: Dewa Putu Ananda Taurean Mahesa

NRP: 5025231158

Kelas: Pemrograman Perangkat Bergerak C


Link Project Github


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 GET untuk 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 RetrofitClient menggunakan 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), dan Error (gagal memuat data beserta pesan kesalahannya).
  • NewsViewModel.kt: Pusat kendali logika aplikasi. Kelas ini meminta data dari NewsRepository di dalam proses latar belakang (background thread) menggunakan Kotlin Coroutines, lalu memancarkan (emit) hasilnya ke UI menggunakan StateFlow. 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 HeadlineCard untuk desain berita utama bergambar besar, dan NewsCard untuk 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 dari NewsUiState untuk 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 instance NewsViewModel agar state antar layar tetap tersinkronisasi.
  • MainActivity.kt: Titik awal (entry point) aplikasi Android berjalan. File ini memanggil tema bawaan aplikasi (MaterialTheme) dan memuat AppNavGraph() 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).

5. Hasil Akhir




Comments

Popular posts from this blog

Tugas Pertemuan 7 - LoginPage

Tugas Pertemuan 11 - MarketSiswa

Tugas Pertemuan 13 - Registrasi Siswa