News App
Nama: Stefanus Yosua Mamamoba
NRP: 5025231066
Repository (GitHub)
Struktur Repositori
app/src/main/java/com/example/newsapp/
- MainActivity.kt memanggil NewsScreen sebagai tampilan utama.
- data/remote/Berisi kode yang berhubungan langsung dengan REST API.
- NewsApiService.ktMendefinisikan endpoint API menggunakan Retrofit, seperti:
- GET /v2/top-headlines
- GET /v2/everything
- NewsResponse.kt Berisi data class untuk menampung response JSON dari NewsAPI.
- RetrofitClient.kt Mengatur konfigurasi Retrofit, base URL, converter Gson, dan HTTP client.
- data/repository/ Berisi penghubung antara sumber data API dan ViewModel.
- NewsRepository.kt Bertugas mengambil data berita dari API, memproses response, lalu mengubahnya menjadi model yang dipakai aplikasi.
- model/ Berisi model data utama aplikasi.
- Article.kt Data class yang merepresentasikan satu berita, seperti judul, penulis, deskripsi, gambar, sumber, tanggal publikasi, dan URL berita.
- ui/news/ Berisi tampilan dan state untuk halaman berita.NewsScreen.kt Berisi UI Jetpack Compose untuk menampilkan daftar berita, kolom pencarian, loading, error, dan empty state.
- NewsViewModel.kt Mengatur logika tampilan, mengambil data dari repository, dan menyimpan state menggunakan StateFlow.
- NewsUiState.kt Berisi state aplikasi, seperti loading, daftar artikel, query pencarian, dan pesan error.
- ui/theme/ Berisi pengaturan tema aplikasi seperti warna, typography, dan Material Theme.
- app/build.gradle.kts Berisi konfigurasi module Android, dependency seperti Retrofit, Coil, Lifecycle, dan Compose.
- gradle/libs.versions.toml Berisi daftar versi library dan dependency yang digunakan project.
- AndroidManifest.xml Berisi konfigurasi aplikasi Android, termasuk permission internet:
- <uses-permission android:name="android.permission.INTERNET" />
local.properties Tempat menyimpan konfigurasi lokal seperti API key: NEWS_API_KEY=YOUR_API_KE
Fitur Aplikasi
- Menampilkan berita terbaru dari REST API NewsAPI.
- Mengambil data dari endpoint top-headlines.
- Mencari berita berdasarkan kata kunci menggunakan endpoint everything.
- Menampilkan gambar berita menggunakan Coil.
- Menampilkan judul, sumber berita, penulis, dan deskripsi.
- Menampilkan loading saat data sedang diambil.
- Menampilkan pesan error jika API key belum diisi atau request gagal.
- Menampilkan empty state jika tidak ada berita ditemukan.
- Menggunakan arsitektur MVVM.
- Menggunakan Kotlin Coroutines untuk proses asynchronous.
- Menggunakan StateFlow untuk mengatur state UI.
- Menggunakan Jetpack Compose untuk membangun tampilan modern.
Penjelasan Singkat
News App adalah aplikasi Android modern untuk menampilkan berita dari internet menggunakan REST API. Aplikasi ini menggunakan NewsAPI sebagai sumber data berita.
Komunikasi antara aplikasi dan server dilakukan menggunakan Retrofit. Retrofit mengirim HTTP request ke server NewsAPI, lalu server mengembalikan response dalam bentuk JSON. Data JSON tersebut kemudian diubah menjadi object Kotlin agar bisa digunakan oleh aplikasi.
Aplikasi ini menggunakan arsitektur MVVM agar kode lebih rapi dan mudah dipahami. ViewModel bertugas mengatur data untuk UI, Repository bertugas mengambil data dari API, dan UI hanya fokus menampilkan data ke layar.
Alur Aplikasi
- Pengguna membuka aplikasi News App.
- MainActivity dijalankan sebagai entry point aplikasi.
- MainActivity menampilkan NewsScreen.
- NewsViewModel otomatis memanggil fungsi loadTopHeadlines.
- NewsViewModel meminta data berita ke NewsRepository.
- NewsRepository memanggil endpoint top-headlines melalui NewsApiService.
- Retrofit mengirim request HTTP ke server NewsAPI.
- Server NewsAPI memproses request.
- Server mengembalikan response dalam format JSON.
- Retrofit mengubah JSON menjadi object Kotlin NewsResponse.
- NewsRepository mengambil daftar artikel dari response.
- Data artikel diubah menjadi model Article.
- NewsRepository mengirim hasil data ke NewsViewModel.
- NewsViewModel memperbarui NewsUiState.
- NewsScreen membaca state terbaru menggunakan StateFlow.
- Jika data sedang dimuat, aplikasi menampilkan loading.
- Jika terjadi error, aplikasi menampilkan pesan error.
- Jika data kosong, aplikasi menampilkan pesan bahwa berita tidak ditemukan.
- Jika data berhasil didapat, aplikasi menampilkan daftar berita ke layar.
- Saat pengguna mengetik kata kunci dan menekan tombol cari, aplikasi memanggil endpoint pencarian berita.
- Hasil pencarian ditampilkan kembali dalam daftar berita.
Comments
Post a Comment