Praktikum Android Semester 7: Part 1
Praktikum Android Semester 7: Part 2
Praktikum Android Semester 7: Part 3
Praktikum Android Semester 7: Part 4
Praktikum Android Semester 7: Part 5
Praktikum Android Semester 7: Part 6
Praktikum Android Semester 7: Part 7
Pada Praktikum Android Semester 7: Part 4 aplikasi sudah dapat menampilkan data dari web service local yang dibangun sendiri menggunakan PHP dengan GET request, pada kali ini akan dijelaskan cara menggunakan POST request
yang diimplementasikan dalam bentuk Tambah Data.
Pada project PHP file jenisbarang.php
tambahkan function berikut
<?php
function find()
{
$selectSQL = "SELECT * FROM jenisbarang WHERE id = ?";
$stmt = $this->conn->prepare($selectSQL);
$stmt->bindParam(1, $this->id);
$stmt->execute();
return $stmt;
}
function create()
{
$insertSQL = "INSERT INTO jenisbarang VALUES (NULL, ?)";
$stmt = $this->conn->prepare($insertSQL);
$stmt->bindParam(1, $this->namajenisbarang);
if ($stmt->execute()) {
return $this->conn->lastInsertId();
}
return 0;
}
?>
Buat file create.php
pada folder yang sama dengan read.php
dan isikan dengan
<?php
include_once "../../config/api-header.php";
include_once "jenisbarang.php";
$jenisbarang = new Jenisbarang($db);
$data = json_decode(file_get_contents("php://input"));
$response["success"] = false;
$response["data"] = array();
$response["message"] = "";
if (
!empty($data->namajenisbarang)
) {
$jenisbarang->namajenisbarang = $data->namajenisbarang;
$jenisbarang->id = $jenisbarang->create();
if ($jenisbarang->id != 0) {
$stmt = $jenisbarang->find();
$row = $stmt->fetch();
$response["data"] = array(
"id" => $row["id"],
"namajenisbarang" => $row["namajenisbarang"]
);
http_response_code(201);
$response["success"] = true;
$response["message"] = "create data jenisbarang berhasil";
} else {
http_response_code(503);
$response["message"] = "create data jenisbarang gagal";
}
} else {
http_response_code(400);
$response["message"] = "lengkapi data jenisbarang";
}
echo json_encode($response);
Pada Android Studio
buat sebuah activity baru, bisa diberikan nama JenisbarangPostActivity
dan pada layout xml-nya isikan dengan
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.jenisbarang.JenisbarangPostActivity">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:layout_editor_absoluteX="188dp"
tools:layout_editor_absoluteY="221dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<EditText
android:id="@+id/etIdJenisbarang"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="0"
android:hint="Id"
android:ems="10"
android:inputType="number" />
<EditText
android:id="@+id/etNamajenisbarang"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Nama Jenis Barang"
android:ems="10"
android:inputType="text" />
<Button
android:id="@+id/btSimpanJenisbarangPost"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Simpan" />
<ProgressBar
android:id="@+id/progressBarJenisbarangPost"
style="?android:attr/progressBarStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>
Pada model Jenisbarang
tambahkan
data class JenisbarangResponse(
val success: Boolean,
val data : JenisbarangData,
val message: String
)
Data class ini berfungsi untuk menampung response dari hasil post data.
Pada interface ApiService
tambahkan function yang bernama create yang memiliki return value berupa JenisbarangResponse
, bisa ditulis seperti berikut
@POST("jenisbarang/create.php")
suspend fun create(@Body jenisbarangData: JenisbarangData): Response<JenisbarangResponse>
Pada JenisbarangViewModel
tambahkan atribut
val createResponse = MutableLiveData<Response<JenisbarangResponse>>()
Masih pada JenisbarangViewModel
tambahkan function yang menggunakan create
pada ApiService, bisa ditulis seperti berikut
fun create(jenisbarangData: JenisbarangData) {
viewModelScope.launch {
val response = Api.retrofitService.create(jenisbarangData)
createResponse.value = response
}
}
Dengan function yang dibutuhkan sudah dibuat, bisa dilanjutkan dengan mengisi JenisbarangPostActivity
, bisa ditulis seperti berikut
class JenisbarangPostActivity : AppCompatActivity() {
private lateinit var binding: ActivityJenisbarangPostBinding
private val viewModel: JenisbarangViewModel by lazy {
ViewModelProvider(this).get(JenisbarangViewModel::class.java)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityJenisbarangPostBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.progressBarJenisbarangPost.visibility = View.INVISIBLE
binding.btSimpanJenisbarangPost.visibility = View.VISIBLE
binding.btSimpanJenisbarangPost.setOnClickListener{
val idJenisbarang = binding.etIdJenisbarang.text.toString()
val namaJenisBarang = binding.etNamajenisbarang.text.toString()
val jenisBarangData = JenisbarangData(idJenisbarang,namaJenisBarang)
binding.progressBarJenisbarangPost.visibility = View.VISIBLE
binding.btSimpanJenisbarangPost.visibility = View.INVISIBLE
viewModel.create(jenisBarangData)
viewModel.createResponse.observe(this,{
binding.progressBarJenisbarangPost.visibility = View.INVISIBLE
binding.btSimpanJenisbarangPost.visibility = View.VISIBLE
Toast.makeText(this, it.body()?.message,Toast.LENGTH_SHORT).show()
})
}
}
}
Selanjutnya dibuat sebuah tombol untuk dapat membuka JenisbarangPostActivity
, bisa ditambahkan dengan membuka xml dari activity_jenisbarang.xml
dan tambahkan
<Button
android:id="@+id/btTambahJenisbarang"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Tambah"
/>
Buat method setOnClickListener
untuk btTambahJenisbarang
pada JenisbarangActivity
binding.btTambahJenisbarang.setOnClickListener{
val intent = Intent(this, JenisbarangPostActivity::class.java)
startActivity(intent)
}
Praktikum Android Semester 7: Part 1
Praktikum Android Semester 7: Part 2
Praktikum Android Semester 7: Part 3
Praktikum Android Semester 7: Part 4
Praktikum Android Semester 7: Part 5
Praktikum Android Semester 7: Part 6
Praktikum Android Semester 7: Part 7