Nurul Syarifah
(044334393)
Tugas 2: Pemgrograman Berbasis Perangkat Bergerak
Membuat Aplikasi Crypto Android dengan Android Studio
• Klik New Project > Pilih Empty Activity > Next
• Isi Name: CryptoApp
• Pilih bahasa Kotlin
• Minimum SDK: pilih yang kamu mau, misal API 21 (Lollipop)
• Finish
Dengan penatalaksanaan berikut ini:
1. [Link] (Module: app)
Klik Gradle Scripts > [Link] (Module: app)
Untuk: Menambahkan dependensi seperti Retrofit, RecyclerView, Gson (untuk fetch dan
menampilkan data dari API).
plugins {
id("[Link]")
id("[Link]")
}
android {
namespace = "[Link]"
compileSdk = 35
defaultConfig {
applicationId = "[Link]"
minSdk = 22
targetSdk = 35
versionCode = 1
versionName = "1.0"
testInstrumentationRunner = "[Link]"
}
buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("[Link]"),
"[Link]"
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = "11"
}
buildFeatures {
viewBinding = true
}
}
dependencies {
// AndroidX dasar
implementation("[Link]:core-ktx:1.13.1")
implementation("[Link]:appcompat:1.6.1")
implementation("[Link]:material:1.11.0")
implementation("[Link]:constraintlayout:2.1.4")
// RecyclerView
implementation("[Link]:recyclerview:1.3.1")
// Retrofit + Gson
implementation("[Link].retrofit2:retrofit:2.9.0")
implementation("[Link].retrofit2:converter-gson:2.9.0")
// Testing
testImplementation("junit:junit:4.13.2")
androidTestImplementation("[Link]:junit:1.1.5")
androidTestImplementation("[Link]:espresso-core:3.5.1")
}
Lalu klik Sync Now di pojok kanan atas Android Studio.
[Link] Internet di [Link]
Buka app/src/main/[Link] tulis
Untuk menentukan izin internet untuk aplikasi mobile.
<manifest xmlns:android="[Link]
package="[Link]">
<uses-permission android:name="[Link]" />
<application
android:label="CryptoApp"
android:allowBackup="true"
android:supportsRtl="true">
<activity android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="[Link]" />
<category android:name="[Link]" />
</intent-filter>
</activity>
</application>
</manifest>
3. [Link]
Klik kanan pada package (com/yourname/projectname) → New → Kotlin Class/File → beri
nama: [Link]
Fungsinya untuk Interface Retrofit untuk mengambil data dari API menggunakan anotasi
@GET.
package [Link]
import [Link]
import [Link]
interface ApiService {
@GET("tickers/")
fun getCryptos(): Call<CryptoResponse>
}
4. [Link] — Model data
app/src/main/java/com/yourname/projectname/[Link]
Untuk mempresentasi data satu item crypto (name, symbol, price_usd) sesuai struktur JSON
API.
package [Link]
data class CryptoItem(
val id: String,
val symbol: String,
val name: String,
val price_usd: String
)
5. [Link]
app/src/main/java/com/yourname/projectname/[Link]
Untuk menyusun struktur respons dari API tickers yang isinya list data.
package [Link]
data class CryptoResponse(
val data: List<Crypto>
)
data class Crypto(
val name: String,
val symbol: String,
val price_usd: String
)
6. [Link] — Adapter RecyclerView
app/src/main/java/com/yourname/projectname/[Link]
Fungsinya sebagai Adapter RecyclerView untuk menghubungkan data dengan layout
item_crypto.xml.
package [Link]
import [Link]
import [Link]
import [Link]
import [Link]
import [Link]
class CryptoAdapter(private val cryptoList: List<Crypto>) :
[Link]<[Link]>() {
class CryptoViewHolder(itemView: View) : [Link](itemView) {
val txtName: TextView = [Link]([Link])
val txtSymbol: TextView = [Link]([Link])
val txtPrice: TextView = [Link]([Link])
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CryptoViewHolder {
val view = [Link]([Link])
.inflate([Link].item_crypto, parent, false)
return CryptoViewHolder(view)
}
override fun onBindViewHolder(holder: CryptoViewHolder, position: Int) {
val crypto = cryptoList[position]
[Link] = [Link]
[Link] = [Link]
[Link] = "USD ${crypto.price_usd}"
}
override fun getItemCount(): Int = [Link]
}
7. activity_main.xml — Layout utama dengan RecyclerView dan Button
app/src/main/res/layout/activity_main.xml
Berfungsi sebagai layout utama, berisi tombol "Get Data" dan RecyclerView.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="[Link]
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp">
<Button
android:id="@+id/btnFetch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Get Data" />
<[Link]
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
8. item_crypto.xml — Layout tiap item list
app/src/main/res/layout/item_crypto.xml
Berfungsi sebagai Layout 1 item tampilan data crypto dalam list (isi: name, symbol, price).
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="[Link]
android:padding="8dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/txtName"
android:textStyle="bold"
android:textSize="16sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/txtSymbol"
android:textSize="14sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/txtPrice"
android:textSize="14sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
9. [Link] — Activity utama yang menghubungkan semua
app/src/main/java/com/yourname/projectname/[Link]
Sebagai Logika utama — tombol ambil data, API call, dan menampilkan hasil ke RecyclerView.
package [Link]
import [Link]
import [Link]
import [Link]
import [Link]
import [Link]
import retrofit2.*
import [Link]
class MainActivity : AppCompatActivity() {
private lateinit var recyclerView: RecyclerView
private lateinit var adapter: CryptoAdapter
override fun onCreate(savedInstanceState: Bundle?) {
[Link](savedInstanceState)
setContentView([Link].activity_main)
val btnFetch: Button = findViewById([Link])
recyclerView = findViewById([Link])
[Link] = LinearLayoutManager(this)
[Link] {
fetchCryptoData()
}
}
private fun fetchCryptoData() {
val retrofit = [Link]()
.baseUrl("[Link]
.addConverterFactory([Link]())
.build()
val api = [Link](ApiService::[Link])
[Link]().enqueue(object : Callback<CryptoResponse> {
override fun onResponse(
call: Call<CryptoResponse>,
response: Response<CryptoResponse>
){
if ([Link]) {
val cryptos = [Link]()?.data ?: emptyList()
adapter = CryptoAdapter(cryptos)
[Link] = adapter
}
}
override fun onFailure(call: Call<CryptoResponse>, t: Throwable) {
[Link]()
}
})
}
}
Hasil: Proyek sudah selesai dan build berhasil, namun terjadi crash saat dijalankan