Membuat aplikasi input data siswa menggunakan Kotlin di Android Studio
Fitur yang Akan Dibuat
- Form input data siswa (EditText + Button “Simpan”).
- Menyimpan data ke database SQLite (local database).
- Menampilkan data siswa dalam daftar (RecyclerView).
- (Opsional) Fitur hapus dan edit data.
Fitur yang Akan Dibuat
Pastikan kamu sudah:
1. Menginstal Android Studio (versi terbaru).
2. Minimum SDK: Android 6.0 (API 23) atau lebih tinggi.
3. Memilih project baru dengan Empty Activity.
4. Bahasa: Kotlin
1. Struktur Project
app/
├─ java/com.example.datasiswa/
│ ├─ MainActivity.kt
│ ├─ AddStudentActivity.kt
│ ├─ DatabaseHelper.kt
│ ├─ Student.kt
│ └─ StudentAdapter.kt
└─ res/
├─ layout/
│ ├─ activity_main.xml
│ ├─ activity_add_student.xml
│ └─ item_student.xml
2. Buat Model Data Student.kt
package
com.example.datasiswa
data class Student(
val id: Int = 0,
val nis: String,
val nama: String,
val kelas: String,
val jurusan: String
)
3. Buat Database Helper DatabaseHelper.kt
package
com.example.datasiswa
import android.content.ContentValues
import android.content.Context
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper
class DatabaseHelper(context: Context) :
SQLiteOpenHelper(context,
"db_siswa", null, 1) {
override fun onCreate(db:
SQLiteDatabase) {
db.execSQL(
"CREATE TABLE siswa
(" +
"id INTEGER
PRIMARY KEY AUTOINCREMENT, " +
"nis TEXT, nama
TEXT, kelas TEXT, jurusan TEXT)"
)
}
override fun onUpgrade(db:
SQLiteDatabase, oldVersion: Int, newVersion: Int) {
db.execSQL("DROP TABLE IF
EXISTS siswa")
onCreate(db)
}
fun insertStudent(student: Student):
Long {
val db = writableDatabase
val values =
ContentValues().apply {
put("nis",
student.nis)
put("nama",
student.nama)
put("kelas",
student.kelas)
put("jurusan",
student.jurusan)
}
return
db.insert("siswa", null, values)
}
fun getAllStudents():
List<Student> {
val db = readableDatabase
val cursor =
db.rawQuery("SELECT * FROM siswa", null)
val students =
mutableListOf<Student>()
if (cursor.moveToFirst()) {
do {
val student = Student(
id =
cursor.getInt(0),
nis =
cursor.getString(1),
nama =
cursor.getString(2),
kelas =
cursor.getString(3),
jurusan =
cursor.getString(4)
)
students.add(student)
} while (cursor.moveToNext())
}
cursor.close()
return students
}
}
4. Layout Input Data activity_add_student.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:padding="16dp"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/inputNIS"
android:hint="NIS"
android:inputType="number"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<EditText
android:id="@+id/inputNama"
android:hint="Nama
Siswa"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<EditText
android:id="@+id/inputKelas"
android:hint="Kelas"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<EditText
android:id="@+id/inputJurusan"
android:hint="Jurusan"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btnSimpan"
android:text="Simpan
Data"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
5. Activity Input AddStudentActivity.kt
package
com.example.datasiswa
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_add_student.*
class AddStudentActivity : AppCompatActivity() {
private lateinit var db:
DatabaseHelper
override fun
onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_add_student)
db = DatabaseHelper(this)
btnSimpan.setOnClickListener {
val nis =
inputNIS.text.toString()
val nama =
inputNama.text.toString()
val kelas =
inputKelas.text.toString()
val jurusan =
inputJurusan.text.toString()
if (nis.isNotEmpty()
&& nama.isNotEmpty() && kelas.isNotEmpty() &&
jurusan.isNotEmpty()) {
val student = Student(nis
= nis, nama = nama, kelas = kelas, jurusan = jurusan)
db.insertStudent(student)
Toast.makeText(this,
"Data Tersimpan", Toast.LENGTH_SHORT).show()
finish()
} else {
Toast.makeText(this,
"Lengkapi semua field!", Toast.LENGTH_SHORT).show()
}
}
}
}
6. Layout List Siswa item_student.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:padding="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#f1f1f1"
android:layout_marginBottom="8dp">
<TextView
android:id="@+id/txtNama"
android:textStyle="bold"
android:textSize="18sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView android:id="@+id/txtNIS"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/txtKelas"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/txtJurusan"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
7. Adapter untuk RecyclerView StudentAdapter.kt
package
com.example.datasiswa
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
class StudentAdapter(private val list: List<Student>) :
RecyclerView.Adapter<StudentAdapter.StudentViewHolder>() {
class StudentViewHolder(itemView:
View) : RecyclerView.ViewHolder(itemView) {
val txtNama: TextView =
itemView.findViewById(R.id.txtNama)
val txtNIS: TextView =
itemView.findViewById(R.id.txtNIS)
val txtKelas: TextView =
itemView.findViewById(R.id.txtKelas)
val txtJurusan: TextView =
itemView.findViewById(R.id.txtJurusan)
}
override fun onCreateViewHolder(parent:
ViewGroup, viewType: Int): StudentViewHolder {
val view =
LayoutInflater.from(parent.context)
.inflate(R.layout.item_student, parent, false)
return StudentViewHolder(view)
}
override fun onBindViewHolder(holder:
StudentViewHolder, position: Int) {
val student = list[position]
holder.txtNama.text =
student.nama
holder.txtNIS.text = "NIS:
${student.nis}"
holder.txtKelas.text =
"Kelas: ${student.kelas}"
holder.txtJurusan.text =
"Jurusan: ${student.jurusan}"
}
override fun getItemCount(): Int =
list.size
}
8. Main Activity activity_main.xml
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:padding="16dp"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_above="@+id/btnTambah"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<Button
android:id="@+id/btnTambah"
android:text="Tambah
Siswa"
android:layout_alignParentBottom="true"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</RelativeLayout>
9. MainActivity.kt
package
com.example.datasiswa
import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
private lateinit var db:
DatabaseHelper
override fun
onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
db = DatabaseHelper(this)
btnTambah.setOnClickListener {
startActivity(Intent(this,
AddStudentActivity::class.java))
}
}
override fun onResume() {
super.onResume()
val list = db.getAllStudents()
recyclerView.layoutManager =
LinearLayoutManager(this)
recyclerView.adapter =
StudentAdapter(list)
}
}
10. Jalankan Aplikasi
- Jalankan di emulator atau perangkat fisik Android.
- Tekan Tambah Siswa, isi data, lalu Simpan.
- Data akan muncul di daftar.
0 komentar
Posting Komentar