Ini merupakan pelajaran lanjutan dari :
CRUD ( Create, Read, Update, Delete ) MySQL + PHP Dengan Kotlin - 2
1. Masuk ke class RVAdapterStudent
Di sini kan membuat intent ke class ManageStudentActivity
Pertama buat dulu onClickListener pada cvList (cardview yang telah kita buat di student_list.xml) di dalam method onBindViewHolder
holder.view.cvList.setOnClickListener {
}
kemudian tambahkan script berikut di dalam method onClicknya.
val i = Intent(context,ManageStudentActivity::class.java)
i.putExtra("editmode","1")
i.putExtra("nim",arrayList?.get(position)?.nim)
i.putExtra("name",arrayList?.get(position)?.name)
i.putExtra("address",arrayList?.get(position)?.address)
i.putExtra("gender",arrayList?.get(position)?.gender)
context.startActivity(i)
Pada script di atas akan mengoper beberapa value via intent, value ini nanti yang akan diterima oleh class ManageStudentActivity. Ingat method onEditMode() yang telah dibuat sebelumnya ?, ya. Datanya akan diolah oleh method tersebut.
2. Masuk ke class ManageStudentActivity
Buat sebuah private method baru dengan nama update(), dan tambahkan script berikut di dalam method nya, sehingga script dari method nya menjadi seperti ini.
private fun update(){
val loading = ProgressDialog(this)
loading.setMessage("Mengubah data...")
loading.show()
AndroidNetworking.post(ApiEndPoint.UPDATE)
.addBodyParameter("nim",txNim.text.toString())
.addBodyParameter("name",txName.text.toString())
.addBodyParameter("address",txAddress.text.toString())
.addBodyParameter("gender",gender)
.setPriority(Priority.MEDIUM)
.build()
.getAsJSONObject(object : JSONObjectRequestListener {
override fun onResponse(response: JSONObject?) {
loading.dismiss()
Toast.makeText(applicationContext,response?.getString("message"),Toast.LENGTH_SHORT).show()
if(response?.getString("message")?.contains("successfully")!!){
this@ManageStudentActivity.finish()
}
}
override fun onError(anError: ANError?) {
loading.dismiss()
Log.d("ONERROR",anError?.errorDetail?.toString())
Toast.makeText(applicationContext,"Connection Failure", Toast.LENGTH_SHORT).show() }
})
}
script di atas hampir sama seperti script yang dipakai oleh method create(). Hanya saja mengubah endpoint api ke UPDATE dan mengubah pesan pada progressdialog.
Logika yang digunakan pun sama.
Sekarang buat lagi sebuah private method baru dengan nama delete(), dan tambahkan script berikut di dalam method nya, sehingga script dari method nya menjadi seperti ini.
private fun delete(){
val loading = ProgressDialog(this)
loading.setMessage("Menghapus data...")
loading.show()
AndroidNetworking.get(ApiEndPoint.DELETE+"?nim="+txNim.text.toString())
.setPriority(Priority.MEDIUM)
.build()
.getAsJSONObject(object : JSONObjectRequestListener {
override fun onResponse(response: JSONObject?) {
loading.dismiss()
Toast.makeText(applicationContext,response?.getString("message"),Toast.LENGTH_SHORT).show()
if(response?.getString("message")?.contains("successfully")!!){
this@ManageStudentActivity.finish()
}
}
override fun onError(anError: ANError?) {
loading.dismiss()
Log.d("ONERROR",anError?.errorDetail?.toString())
Toast.makeText(applicationContext,"Connection Failure", Toast.LENGTH_SHORT).show() }
})
}
seperti sebelumnya script di atas hampir sama seperti script yang dipakai oleh method create(). Hanya saja mengubah METHOD POST ket GET, endpoint api ke DELETE dan mengubah pesan pada progressdialog.
Sekarang panggil method update dan delete tadi di masing-masing button nya.
buat listener onClick pada btnUpdate dan btnDelete kemudian panggil masing-masing method nya. Untuk click listenernya di taruh di dalam method onCreate.
btnUpdate.setOnClickListener {
}
btnDelete.setOnClickListener {
}
Tapi untuk listener yang ada pada button delete, tambahkan sebuah dialog konfirmasi dulu. Sehingga script click listenernya menjadi seperti ini.
btnUpdate.setOnClickListener {
update()
}
btnDelete.setOnClickListener {
AlertDialog.Builder(this)
.setTitle("Konfirmasi")
.setMessage("Hapus data ini ?")
.setPositiveButton("HAPUS",DialogInterface.OnClickListener { dialogInterface, i ->
delete()
})
.setNegativeButton("BATAL",DialogInterface.OnClickListener { dialogInterface, i ->
dialogInterface.dismiss()
})
.show()
}
Pada script alertdialog ditambahkan 2 klik listener yaitu onPositive dan onNegative. Saat onPositive dipilih maka akan memanggil method delete. Saat onNegative maka alertdialog akan ditutup.
Keseluruhan script dari ManageStudentActivity seperti berikut
class ManageStudentActivity : AppCompatActivity() {
lateinit var i:Intent
private var gender = "Pria"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_manage_student)
i = intent
if(i.hasExtra("editmode")){
if(i.getStringExtra("editmode").equals("1")){
onEditMode()
}
}
rgGender.setOnCheckedChangeListener { radioGroup, i ->
when(i){
R.id.radioBoy->{
gender = "Pria"
}
R.id.radioGirl->{
gender = "Wanita"
}
}
}
btnCreate.setOnClickListener {
create()
}
btnUpdate.setOnClickListener {
update()
}
btnDelete.setOnClickListener {
AlertDialog.Builder(this)
.setTitle("Konfirmasi")
.setMessage("Hapus data ini ?")
.setPositiveButton("HAPUS",DialogInterface.OnClickListener { dialogInterface, i ->
delete()
})
.setNegativeButton("BATAL",DialogInterface.OnClickListener { dialogInterface, i ->
dialogInterface.dismiss()
})
.show()
}
}
private fun onEditMode(){
txNim.setText(i.getStringExtra("nim"))
txName.setText(i.getStringExtra("name"))
txAddress.setText(i.getStringExtra("address"))
txNim.isEnabled = false
btnCreate.visibility = View.GONE
btnUpdate.visibility = View.VISIBLE
btnDelete.visibility = View.VISIBLE
gender = i.getStringExtra("gender")
if(gender.equals("Pria")){
rgGender.check(R.id.radioBoy)
}else{
rgGender.check(R.id.radioGirl)
}
}
private fun create(){
val loading = ProgressDialog(this)
loading.setMessage("Menambahkan data...")
loading.show()
AndroidNetworking.post(ApiEndPoint.CREATE)
.addBodyParameter("nim",txNim.text.toString())
.addBodyParameter("name",txName.text.toString())
.addBodyParameter("address",txAddress.text.toString())
.addBodyParameter("gender",gender)
.setPriority(Priority.MEDIUM)
.build()
.getAsJSONObject(object : JSONObjectRequestListener {
override fun onResponse(response: JSONObject?) {
loading.dismiss()
Toast.makeText(applicationContext,response?.getString("message"),Toast.LENGTH_SHORT).show()
if(response?.getString("message")?.contains("successfully")!!){
this@ManageStudentActivity.finish()
}
}
override fun onError(anError: ANError?) {
loading.dismiss()
Log.d("ONERROR",anError?.errorDetail?.toString())
Toast.makeText(applicationContext,"Connection Failure", Toast.LENGTH_SHORT).show() }
})
}
private fun update(){
val loading = ProgressDialog(this)
loading.setMessage("Mengubah data...")
loading.show()
AndroidNetworking.post(ApiEndPoint.UPDATE)
.addBodyParameter("nim",txNim.text.toString())
.addBodyParameter("name",txName.text.toString())
.addBodyParameter("address",txAddress.text.toString())
.addBodyParameter("gender",gender)
.setPriority(Priority.MEDIUM)
.build()
.getAsJSONObject(object : JSONObjectRequestListener {
override fun onResponse(response: JSONObject?) {
loading.dismiss()
Toast.makeText(applicationContext,response?.getString("message"),Toast.LENGTH_SHORT).show()
if(response?.getString("message")?.contains("successfully")!!){
this@ManageStudentActivity.finish()
}
}
override fun onError(anError: ANError?) {
loading.dismiss()
Log.d("ONERROR",anError?.errorDetail?.toString())
Toast.makeText(applicationContext,"Connection Failure", Toast.LENGTH_SHORT).show() }
})
}
private fun delete(){
val loading = ProgressDialog(this)
loading.setMessage("Menghapus data...")
loading.show()
AndroidNetworking.get(ApiEndPoint.DELETE+"?nim="+txNim.text.toString())
.setPriority(Priority.MEDIUM)
.build()
.getAsJSONObject(object : JSONObjectRequestListener {
override fun onResponse(response: JSONObject?) {
loading.dismiss()
Toast.makeText(applicationContext,response?.getString("message"),Toast.LENGTH_SHORT).show()
if(response?.getString("message")?.contains("successfully")!!){
this@ManageStudentActivity.finish()
}
}
override fun onError(anError: ANError?) {
loading.dismiss()
Log.d("ONERROR",anError?.errorDetail?.toString())
Toast.makeText(applicationContext,"Connection Failure", Toast.LENGTH_SHORT).show() }
})
}
}
run aplikasinya.