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