Senin, 05 Juli 2021

BAB 13 CRUD Database MySQL dengan PHP Pada Apk Android Studio


CRUD adalah singkatan dari create, read, update, and delete. Akronim CRUD mengidentifikasi semua fungsi utama yang melekat pada database relasional dan aplikasi yang digunakan untuk mengelolanya, termasuk Oracle Database, Microsoft SQL Server, MySQL, dan lainnya.

Fungsi create, read, update, dan delete merupakan fungsi yang secara konstan digunakan dan merupakan bagian yang tidak terpisahkan dari pekerjaan seorang programmer. Ini karena hampir sebagian besar pemograman komputer modern menggunakan fungsi CRUD.

  • Create = Fungsi ini memungkinkanmu membuat record baru dalam database.

  • Read = Fungsi ini memungkinkan kamu untuk mencari dan mengambil data tertentu dalam tabel dan membaca nilainya.

  • Update = Untuk memodifikasi record yang telah tersimpan di database.

  • Delete = Menghapus record yang telah tersimpan di database.


PRAKTIKUM 
  • Langkah awal jalankan apk IDE Android Studio, dengan Cara :
a. Pilih Start > Android Studio
b. Pilih > Start a new Android Studio Project
c. Pilih > Empty Sctivity > Next
  • Name > Tugas13
  • Package Name : ubah menjadi nama blog kalian masing-masing, atau juga bisa com.example yg secara otomatis ada di Android studio lalu fiikuti nama project kalian Tugas13.
  • SaveLocation : C:\User\acer\Android StudioProjects\Tugas13
  • Language > Java
  • Minimum API Level > API 16 > Klik Finish

  • Kemudian buat layout Linear Layout dengan ketikan kode program activity_main.xml seperti gambar dibawah ini :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:paddingTop="16dp"
    android:paddingBottom="16dp"
    tools:context=".MainActivity">
    <TextView
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="Nama Mahasiswa : "
        android:textSize="18dp"/>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/editTextName"
        android:hint="Masukan Nama Anda"
        android:inputType="text" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="N R P : "
        android:textSize="18dp" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/editTextNRP"
        android:inputType="number" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Kelas : "
        android:textSize="18dp" />

    <Spinner
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/spinnerkelas"
        android:spinnerMode="dropdown" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Blog URL : "
        android:textSize="18dp"/>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/editTextBlog"
        android:hint="Input Link URL Blog"
        android:inputType="text" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Tambah Data Mahasiswa"
        android:id="@+id/buttonAdd" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Daftar Mahasiswa"
        android:id="@+id/buttonView" />

  </LinearLayout>


  • Selanjutnya ketikan kode program MainActivity.java sebagai berikut :

package com.example.tugas13;

import androidx.appcompat.app.AppCompatActivity;

import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

import java.nio.channels.AsynchronousChannelGroup;
import java.util.HashMap;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private EditText editTextName;
    private EditText editTextNRP;
    private EditText editTextBlog;
    private Button buttonAdd;
    private Button buttonView;
    private Spinner spinnerKelas;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editTextName = findViewById(R.id.editTextName);
        editTextNRP = findViewById(R.id.editTextNRP);
        editTextBlog = findViewById(R.id.editTextBlog);

        buttonAdd = findViewById(R.id.buttonAdd);
        buttonView = findViewById(R.id.buttonView);

        spinnerKelas = findViewById(R.id.spinnerkelas);

        String[] spinnerItem = new String[] {"TI-1","TI-2","TI-3","TI-Malam"};
        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item,spinnerItem);
        spinnerKelas.setAdapter(adapter);

        buttonAdd.setOnClickListener(this);
        buttonView.setOnClickListener(this);
    }

    private void addMhs(){
        final String name = editTextName.getText().toString().trim();
        final String nrp = editTextNRP.getText().toString().trim();
        final String blog = editTextBlog.getText().toString().trim();
        final String kelas = (String) spinnerKelas.getSelectedItem();
        Log.d("kelas",kelas);

        class AddMhs extends AsyncTask <Void,Void,String>{
            ProgressDialog loading;
            @Override protected void onPreExecute() {
                super.onPreExecute();
                loading = ProgressDialog.show(MainActivity.this, "Menambahkan . . .",
                        "Tunggu . . . ",false, false);
            }

            @Override
            protected void onPostExecute(String s){
                super.onPostExecute(s);
                loading.dismiss();
                Toast.makeText(MainActivity.this, s, Toast.LENGTH_LONG).show();
            }

            @Override
            protected String doInBackground(Void... v){
                HashMap<String,String> params = new HashMap<>();
                params.put(konfigurasi.KEY_MHS_NAMA, name);
                params.put(konfigurasi.KEY_MHS_NRP, nrp);
                params.put(konfigurasi.KEY_MHS_KELAS, kelas);
                params.put(konfigurasi.KEY_MHS_BLOG, blog);

                RequestHandler rh = new RequestHandler();
                String res = rh.sendPostRequest(konfigurasi.URL_ADD, params);
                Log.d("res", res);
                return res;
            }
        }
        AddMhs ae = new AddMhs();
        ae.execute();
    }
    @Override
    public void onClick (View v){
        if (v==buttonAdd){
            addMhs();
        }
        if (v==buttonView){
            startActivity(new Intent(this,TampilSemuaMhs.class));
        }
    }
}


Membuat Layout Untuk Menampilkan Semua Data

Langkah seterusnya kita akan membuat activity baru yang berisi layout activity_tampil_semua_Mhs.xml dan clas TampipSemuaMhs, dengan cara sebagai berikut :
  • Klik kanan pada direktori package name > New > Activity > Empty Activity
  • Isikan kolom Activity Name dengan TampilanSemuaMhs > klik Finish
 
  • Activity_tampil_semua_mhs.xml Layout ini nantinya akan digunakan untuk melihat semua data mahasiswa yang sudah diinputkan pada layout utama. Silahkan tamabhkan kode-kode dibawah pada layout tersebut :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:paddingTop="16dp"
    android:paddingBottom="16dp"
    tools:context=".TampilSemuaMhs">

    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/listView" />

</LinearLayout>

  • Untuk kode-kode java pada class TampilSemuaMhs.java, ketikan codingan sperti berikut in:
package com.example.tugas13;

import androidx.appcompat.app.AppCompatActivity;

import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;

public class TampilSemuaMhs extends AppCompatActivity implements ListView.OnItemClickListener {
    private ListView listView;
    private String JSON_STRING;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tampil_semua_mhs);
        listView = findViewById(R.id.listView);
        listView.setOnItemClickListener(this);
        getJSON();
    }

    private void showMhs(){
        JSONObject jsonObject = null;
        ArrayList <HashMap<String,String>> list = new ArrayList<HashMap<String, String>>();
        try {
            jsonObject = new JSONObject(JSON_STRING);
            JSONArray result = jsonObject.getJSONArray(konfigurasi.TAG_JSON_ARRAY);
            for (int i = 0; i<result.length();i++){
                JSONObject jo = result.getJSONObject(i);
                String id = jo.getString(konfigurasi.TAG_ID);

                String name = jo.getString(konfigurasi.TAG_NAMA);
                HashMap<String,String> mhs = new HashMap<>();
                mhs.put(konfigurasi.TAG_ID, id);
                mhs.put(konfigurasi.TAG_NAMA, name);
                list.add(mhs);
            }
        }
        catch (JSONException e) {
            e.printStackTrace();
        }

        ListAdapter adapter = new SimpleAdapter(TampilSemuaMhs.this, list,
                R.layout.list_item, new String[]{konfigurasi.TAG_ID, konfigurasi.TAG_NAMA},
                new int[]{R.id.id, R.id.name});
        listView.setAdapter(adapter);
    }

    private void getJSON(){
        class GetJSON extends AsyncTask <Void, Void, String>{
            ProgressDialog loading;
            @Override
            protected void onPreExecute(){
                super.onPreExecute();
                loading = ProgressDialog.show(TampilSemuaMhs.this,"Mengambil data","Mohon Tunggu",false,false);
            }

            @Override
            protected void onPostExecute(String s){
                super.onPostExecute(s);
                loading.dismiss();
                JSON_STRING = s;
                showMhs();
            }

            @Override
            protected String doInBackground(Void... params){
                RequestHandler rh = new RequestHandler();
                Log.d("Testing","Test");
                String s = rh.sendGetRequest(konfigurasi.URL_GET_ALL);
                Log.d("response",s);

                return  s;
            }
        }
        GetJSON gj = new GetJSON();
        gj.execute();
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id){
        Intent intent = new Intent(this, TampilMhs.class);
        HashMap<String,String> map = (HashMap)parent.getItemAtPosition(position);
        String mhsID = map.get(konfigurasi.TAG_ID).toString();
        intent.putExtra(konfigurasi.MHS_ID,mhsID);
        startActivity(intent);
    }
}


Membuat Activity ListView

  • Buat activity lagi yang berisi layout list_item.xml dan  class KisView. Cara pembuatanya sama dengan point pertama, hanya pada bagian Activity name silahkan isi dengan "ListView" dan Layout Name diisi dengan "list_item" jika sudah klik Finish.

  • Class ListView.java tidak usah ditambahkan kode-kode java lagi. Biarkan default saja seperti saat kita membuat class baru. Sedangkan untuk list_item.xml isikan kode brikut ini pada layout :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/id" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/name" />

</LinearLayout>


package com.example.tugas13;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

public class ListView extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list_item);
    }
}


Membuat Layout & Activity Untuk Menampilkan Detail Data

Activity ini berfungsi untuk menampilkan detail salah satu data mahasiswa yang diklik dari tampilan semuan data mahasiswa. Activity ini terdiri dari Layout activity_tampip_mhs.xml dan Class TampilMhs.java untuk cara pembuatannya sama dengan diatas.


  • Untuk layout activity_tampil_mh.xml sendiri kita ketikan kode programnya sebagai berikut :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:paddingTop="16dp"
    android:paddingBottom="16dp"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="ID Mahasiswa : " />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/editTextId" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Nama Mahasiswa :" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/editTextName" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="N R P :" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/editTextNRP" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Kelas :" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/editTextKelas" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Blog URL :" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/editTextBlog" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Update Data Mahasiswa"
        android:id="@+id/buttonUpdate" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Hapus Data"
        android:id="@+id/buttonDelete" />

</LinearLayout>

  • Untuk kode java pada class TampilMhs.java kita ketikan codingan seperti ini :
package com.example.tugas13;

import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.HashMap;

public class TampilMhs extends AppCompatActivity implements View.OnClickListener {
    private EditText editTextId;
    private EditText editTextName;
    private EditText editTextNRP;
    private EditText editTextBlog;

    private Spinner spinnerKelas;
    private Button buttonUpdate;
    private Button buttonDelete;

    private String id;


    String[] spinnerItem = new String[] {"TI-1","TI-2","TI-3","TI-Mlm"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tampil_mhs);
        Intent intent = getIntent();
        id = intent.getStringExtra(konfigurasi.MHS_ID);
        editTextId = findViewById(R.id.editTextId);
        editTextName = findViewById(R.id.editTextName);
        editTextNRP = findViewById(R.id.editTextNRP);
        spinnerKelas = findViewById(R.id.spinnerkelas);
        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item,spinnerItem);
        spinnerKelas.setAdapter(adapter);
        editTextBlog = findViewById(R.id.editTextBlog);

        buttonUpdate = findViewById(R.id.buttonUpdate);
        buttonDelete = findViewById(R.id.buttonDelete);
        buttonDelete.setOnClickListener(this);
        buttonUpdate.setOnClickListener(this);
        editTextId.setText(id);
        getMhs();
    }

    private void getMhs(){
        class GetMhs extends AsyncTask<Void,Void,String>{
            ProgressDialog loading;

            @Override
            protected void onPreExecute(){
                super.onPreExecute();
                loading = ProgressDialog.show(TampilMhs.this,"Fetching . . .","Wait. . .",false,false);
            }

            @Override
            protected void onPostExecute (String s){
                super.onPostExecute(s);
                loading.dismiss();
                showMhs(s);
            }

            @Override
            protected String doInBackground(Void... params){
                RequestHandler rh = new RequestHandler();
                String s = rh.sendGetRequestParam(konfigurasi.URL_GET_EMP,id);
                return s;
            }
        }
        GetMhs ge = new GetMhs();
        ge.execute();
    }

    private void showMhs(String json){
        try {
            JSONObject jsonObject = new JSONObject(json);
            JSONArray result = jsonObject.getJSONArray(konfigurasi.TAG_JSON_ARRAY);
            JSONObject c = result.getJSONObject(0);
            String name = c.getString(konfigurasi.TAG_NAMA);
            String nrp = c.getString(konfigurasi.TAG_NRP);
            String kelas = c.getString(konfigurasi.TAG_KELAS);
            String blog = c.getString(konfigurasi.TAG_BLOG);
            editTextName.setText(name);
            editTextNRP.setText(nrp);
            ArrayAdapter<String> berhitung = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item,spinnerItem);
            int selectionPosition= berhitung.getPosition(kelas);
            spinnerKelas.setSelection(selectionPosition);
            editTextBlog.setText(blog);
        }
        catch (JSONException e){
            e.printStackTrace();
        }
    }
    private void updateMhs(){
        final String name = editTextName.getText().toString().trim();
        final String nrp = editTextNRP.getText().toString().trim();
        final String kelas = (String)spinnerKelas.getSelectedItem();
        final String blog = editTextBlog.getText().toString().trim();
        class UpdateMhs extends AsyncTask<Void,Void,String>{ ProgressDialog loading;
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                loading = ProgressDialog.show(TampilMhs.this,"Updating...","Wait...",false,
                        false);
            }
            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);
                loading.dismiss();
                Toast.makeText(TampilMhs.this,s,Toast.LENGTH_LONG).show();
            }
            @Override
            protected String doInBackground(Void... params) {
                HashMap<String,String> hashMap = new HashMap<>();
                hashMap.put(konfigurasi.KEY_MHS_ID,id);
                hashMap.put(konfigurasi.KEY_MHS_NAMA,name);
                hashMap.put(konfigurasi.KEY_MHS_NRP,nrp);
                hashMap.put(konfigurasi.KEY_MHS_KELAS,kelas);
                hashMap.put(konfigurasi.KEY_MHS_BLOG,blog);
                RequestHandler rh = new RequestHandler();
                String s = rh.sendPostRequest(konfigurasi.URL_UPDATE_EMP,hashMap);
                Log.d("res",s);
                return s;
            }
        }
        UpdateMhs ue = new UpdateMhs();
        ue.execute();
    }

    private void deleteMhs(){
        class DeleteMhs extends AsyncTask<Void,Void,String>{
            ProgressDialog loading;
            @Override
            protected void onPreExecute(){
                super.onPreExecute();
                loading = ProgressDialog.show(TampilMhs.this, "Updating. . .","Tunggu. . .",false,false);
            }

            @Override
            protected void onPostExecute(String s){
                super.onPostExecute(s);
                loading.dismiss();
                Toast.makeText(TampilMhs.this,s,Toast.LENGTH_LONG).show();
            }

            @Override
            protected String doInBackground(Void... params){
                RequestHandler rh = new RequestHandler();
                String s = rh.sendGetRequestParam(konfigurasi.URL_DELETE_EMP, id);
                return s;
            }
        }
        DeleteMhs de = new DeleteMhs();
        de.execute();
    }

    private void confirmDeleteMhs(){
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
        alertDialogBuilder.setMessage("Apakah kamu yakin ingin menghapus data ini ?");
        alertDialogBuilder.setPositiveButton("Ya", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface arg0, int arg1) {
                deleteMhs();
                startActivity(new Intent(TampilMhs.this, TampilSemuaMhs.class));
            }
        });
        alertDialogBuilder.setNegativeButton("Tidak", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface arg0, int arg1) {

            }
        });
        AlertDialog alertDialog = alertDialogBuilder.create();
        alertDialog.show();
    }

    @Override
    public void onClick (View v){
        if (v==buttonUpdate){
            updateMhs();
        }
        if (v==buttonDelete){
            confirmDeleteMhs();
        }
    }
}



Persiapan Konfigurasi Program & Cek AndroidStudioManifest

  • Selanjutnya silahkan buat class baru dengan nama konfigurasi.java. Klik kanan pada direkori nama package, caranya Pilih New > Java Class
  • Lalu tambahkan kode-kode berikut dibawah ini
package com.example.tugas13;

public class konfigurasi {
    public static final String URL_ADD = "http://android.unggasid.com/mhs/tambahMhs.php";
    public static final String URL_GET_ALL = "http://android.unggasid.com/mhs/tampilSemuaMhs.php";
    public static final String URL_GET_EMP = "http://android.unggasid.com/mhs/tampilMhs.php?id=";
    public static final String URL_UPDATE_EMP = "http://android.unggasid.com/mhs/updateMhs.php";
    public static final String URL_DELETE_EMP = "http://android.unggasid.com/mhs/hapusMhs.php?id=";

    public static final String KEY_MHS_ID = "id";
    public static final String KEY_MHS_NAMA = "name";
    public static final String KEY_MHS_NRP = "nrp";
    public static final String KEY_MHS_KELAS = "kelas";
    public static final String KEY_MHS_BLOG = "blog";

    public static final String TAG_JSON_ARRAY = "result";
    public static final String TAG_ID = "id";
    public static final String TAG_NAMA = "name";
    public static final String TAG_NRP = "nrp";
    public static final String TAG_KELAS = "kelas";
    public static final String TAG_BLOG = "blog";


    public static final String MHS_ID = "mhs_id";
}

  • Setalah itu buat class RequestHandler.java, caranya sama dengan yang diatas. Class ini berfungsi untuk menangani permintaan jaringan. Untuk codingannya sebagai berikut :
package com.example.tugas13;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;

import javax.net.ssl.HttpsURLConnection;

public class RequestHandler {

    //metode yang digunakan mengirim httpPostRequest
    public String sendPostRequest (String requestURL, HashMap<String,String>postDataParams){
        URL url;
        StringBuilder sb = new StringBuilder();
        try{
            url = new URL(requestURL);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setReadTimeout(15000);
            conn.setConnectTimeout(15000);
            conn.setRequestMethod("POST");
            conn.setDoInput(true);
            conn.setDoOutput(true);

            OutputStream os = conn.getOutputStream();
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os,"UTF-8"));
            writer.write(getPostDataString(postDataParams));
            writer.flush();
            writer.close();
            os.close();
            int responseCode = conn.getResponseCode();
            if(responseCode== HttpsURLConnection.HTTP_OK){
                BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                sb = new StringBuilder();
                String response;
                while ((response = br.readLine())!= null){
                    sb.append(response);
                }
            }
        }
        catch (Exception e){
            e.printStackTrace();
        }
        return sb.toString();
    }

    public String sendGetRequest(String requestURL){
        StringBuilder sb = new StringBuilder();
        try {
            URL url = new URL(requestURL);
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));
            String s;
            while((s=bufferedReader.readLine())!=null){
                sb.append(s+"\n");
            }
        }
        catch (Exception e){
        }
        return sb.toString();
    }
    public String sendGetRequestParam (String requestURL, String id){
        StringBuilder sb = new StringBuilder();
        try{
            URL url = new URL(requestURL+id);
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));
            String s;
            while ((s=bufferedReader.readLine())!=null){
                sb.append(s+"\n");
            }
        }
        catch (Exception e ){ }
        return sb.toString();
    }

    private String getPostDataString (HashMap<String,String>params) throws UnsupportedEncodingException {
        StringBuilder result = new StringBuilder();
        boolean first = true;
        for (Map.Entry<String,String> entry : params.entrySet()){
            if(first)
                first = false;
            else
                result.append("&");
            result.append(URLEncoder.encode(entry.getKey(),"UTF-8"));
            result.append("=");
            result.append(URLEncoder.encode(entry.getValue(),"UTF-8"));
        }
        return result.toString();
    }
}

  • Terakhir Atur AndroidManifest.xml nya menjadi seperti berikut ini :
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.tugas13">
//cuman nambah ini doang, izinin akses internet
    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
//sama nambahin ini, cleartext
        android:usesCleartextTraffic="true"
        android:supportsRtl="true"
        android:theme="@style/Theme.Tugas13">
        <activity android:name=".TampilMhs"></activity>
        <activity android:name=".ListView" />
        <activity android:name=".TampilSemuaMhs" />
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

  • Sekarang coba jalankan dengan menggunakan Emulator yang ada pada Android Studio atau menggunakan Pisical Drive android anda, tampilan dari program yang kita buat diatas tampak seperti vidio dibawah ini


  • Setelah itu cek apakah data yang kalian masukan sudah tersimpan di database server atau belum dengan cara buka browser dan ketikan link http://android.unggasid.com/mhs/
    di browser kalian. Seperti gambar dibawah ini :

Selasa, 29 Juni 2021

BAB 12 Pengenalan SQLite Pada Android Studio

      SQLite merupakan sebuah sistem manajemen basisdata relasional yang bersifat ACID-compliant dan memiliki ukuran pustaka kode yang relatif kecil, ditulis dalam bahasa C. Gampangnya, SQLite itu jenis database yang ringan dan tersedia dalam OS Android.

Langkah pertama jalankan Aplikasi IDE Android Studionya, dengan cara sebagai berikut :
  • Start > Android Studio
  • Pilih > Start a New Android Studio Project
  • Kemudian pilih > Empty Activity > Next

  • Name > Tugas12SQLite
  • Package Name > ubah menjadi nama blog kalian, exp.nenengevi07.blogspot.com lalu diikuti nama project kalian.
  • Save Lication D:\2021\semester6\ti2\ney Tugas 12
  • Minimum API Level > API 16 > Klik Finish
  • Ketikan kode-kode berikut pada Activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="20dp"
    android:background="#f5f5dc"
    tools:context=".MainActivity">

    <ListView
        android:id="@+id/lstTask"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    
<RelativeLayout/>

  • Buat sebuah file layout dengan nama row.xml, nanti file ini digunakan untuk menampilkan isi kegiatan yang akan dilakukan dan disampingnya terdapat kolom hapus

  • Lalu ketikan kode program berikut ini pada file row.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:padding="20dp"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#f5f5dc">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/task_title"
        android:text="Example"
        android:textSize="20sp"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/btnDelete"
        android:text="HAPUS"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:onClick="deleteTask"/>
    
</RelativeLayout>

  • Setelah itu kita akan membuat Menu, caranya klik kanan pada folder res > New > Directory kemudian beri nama menu, seperti dibawah ini :

  • Setelah itu buat layout baru pada directory/folder menu dengan nama layout menu.xml dengan cara klik kanan pada folder Menu>New>Layour Resources File Beri nama menu.xml lalu ketikan program berikut ini
<?xml version="1.0" encoding="utf-8"?>
<menu
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_add_task"
        android:icon="@android:drawable/ic_menu_add"
        android:title="Tambah Tugas "
        app:showAsAction="always" />

</menu>


  • Selanjutnya kita akan membuat class SQLiteOpenHelper dengan nama file DbHelper.java
  • SQLiteOpenHelper adalah sebuah sebclass, yang digunakan untuk menentukan nama database dan versi database yang sedang dipakai. Kita bisa menerapkan method di class ini exp :  OnCreate (SqliteDatabase) ,OnUpgrade (SqliteDatabase int int ) dan OnOpen(SqliteDatabase).
  • Buat sebuah class baru dengan nama DbHelper. Kemudian implementasikan kode-kode berikut pada DbHelper.java
nenengevi07.blogspot.todolist;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import java.util.ArrayList;

public class DbHelper extends SQLiteOpenHelper {
    private static final String DB_NAME="EDMTDev";
    private static final int DB_VER = 1;
    public static final String DB_TABLE="Task";
    public static final String DB_COLUMN="TaskName";
    public DbHelper(Context context){
        super(context, DB_NAME, null, DB_VER);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        String query = String.format("CREATE TABLE %s (ID INTEGER PRIMARY KEY AUTOINCREMENT,%s TEXT NOT NULL);",
                DB_TABLE,DB_COLUMN);
        db.execSQL(query);
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        String query = String.format("DELETE TABLE IF EXISTS %s",DB_TABLE);
        db.execSQL(query);
        onCreate(db);
    }
    public void insertNewTask(String task){ SQLiteDatabase db= this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(DB_COLUMN,task);
        db.insertWithOnConflict(DB_TABLE,null,values,SQLiteDatabase.CONFLICT_REPLACE);
        db.close(); } public void deleteTask(String task){ SQLiteDatabase db = this.getWritableDatabase();
        db.delete(DB_TABLE,DB_COLUMN + " = ?",new String[]{task});
        db.close(); } public ArrayList<String> getTaskList(){ ArrayList<String> taskList = new ArrayList<>();
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.query(DB_TABLE,new String[]{
                DB_COLUMN},null,null,null,null,null);
        while(cursor.moveToNext()){
            int index = cursor.getColumnIndex(DB_COLUMN);
            taskList.add(cursor.getString(index));
        }
        cursor.close();
        db.close();
        return taskList;
    }

  • Selanjutnya kita edit Pada MainActivty.java masukan kode-kode berikut ini. 
package nenengevi07.blogspot.todolist;

import android.content.DialogInterface;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    DbHelper dbHelper;
    ArrayAdapter<String> mAdapter;
    ListView lstTask;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        dbHelper = new DbHelper(this);
        lstTask = (ListView)findViewById(R.id.lstTask);
        loadTaskList();
    }
    private void loadTaskList() {
        ArrayList<String> taskList = dbHelper.getTaskList();
        if(mAdapter==null){
            mAdapter = new ArrayAdapter<String>(this,R.layout.row,R.id.task_title,taskList);
            lstTask.setAdapter(mAdapter);
        } else{ mAdapter.clear();
            mAdapter.addAll(taskList);
            mAdapter.notifyDataSetChanged();
        }
    }
    @Override public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu,menu);
//Change menu icon color
        Drawable icon = menu.getItem(0).getIcon();
        icon.mutate();
        icon.setColorFilter(getResources().getColor(android.R.color.white), PorterDuff.Mode.SRC_IN);
        return super.onCreateOptionsMenu(menu);
    }
    @Override public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.action_add_task: final EditText taskEditText = new EditText(this);
                AlertDialog dialog = new AlertDialog.Builder(this)
                        .setTitle("Tambah Tugas")
                        .setMessage("Apa yang kamu ingin lakukan hari ini ?")
                        .setView(taskEditText)
                        .setPositiveButton("Tambah", new DialogInterface.OnClickListener() {
                                    @Override public void onClick(DialogInterface dialog, int which) {
                                        String task = String.valueOf(taskEditText.getText());
                                        dbHelper.insertNewTask(task);
                                        loadTaskList();
                                    }
                                }
                        )
                        .setNegativeButton("Batal",null)
                        .create();
                dialog.show();
                return true;
        }
        return super.onOptionsItemSelected(item);
    }
    public void onBackPressed() {
        new AlertDialog.Builder(this)
                .setMessage("Apa kalian ingin Menutup Aplikasi ini?")
                .setCancelable(false)
                .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        MainActivity.this.finish();
                    }
                })
                .setNegativeButton("No", null)
                .show();
    } //untuk menutup Aplikasi SQLite
    public void deleteTask(View view){
        View parent = (View)view.getParent();
        final TextView taskTextView = (TextView)parent.findViewById(R.id.task_title);
        Log.e("String", (String) taskTextView.getText());
        AlertDialog dialog = new AlertDialog.Builder(this)
                .setMessage("Apa Anda Yakin Ingin Menghapus ?")
                .setCancelable(false)
                .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) //untuk notifikasi jika Note hendak diHAPUS  {
                        String task = String.valueOf(taskTextView.getText());
                        dbHelper.deleteTask(task);
                        loadTaskList();
                    }
                })
                .setNegativeButton("No", null)
                .show();
    }
}

  • Ubah nama aplikasi sesuai keinginan dengan cara merubah file string.xml yang ada dalam folder. . res/values seperti berikut ini :

<resources>
<string name=="app_name">Tugas12_NoteSQLite</string>
</resources>

  • Jika sudah selesai running aplikasinya pada emulator atau langsunh ke Hp kalian, seperti vidio dibawah ini


Rabu, 23 Juni 2021

BAB 11 Membuat WebView pada Android Studio



Pertama jalankan aplikasi IDE Android Studio, caranya :
a. Pilih Start >> Android Studio

b. Pilih >> Start a new Android Studio Project

c. Pilih >> Empty Activity >> Next

Configure Your Project

  • Name >> WebView
  • Package Name >> ubah menjadi nama blog kalian masing-masing, di sini saya menggunakan url blog saya nenengevi07.blogspot.com lalu di ikuti nama project WebView
  • Save Location >> D:\TI2\neneng_PAB
  • Language >> Java
  • Minimum API Level >> API 16>>Klik Finish
  • Siapkan sebuah File gambar dengan format file .png yang akan digunakan sebagai icon Apk Web view, lalu copy kedalam folder .../res/drawable/ seperti gambar dibawah ini :

  • Selanjutnya buat layout ketikan code program activity_main.xml seperti dibawah ini, aggar progres bar di layout ketika proses load website akan menampilkan icon loading 
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <WebView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:id="@+id/webView" />
    <ProgressBar
        style="?android:attr/progressBarStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="110dp"
        android:id="@+id/progressBar2" />
</RelativeLayout>

  • Buka dan ubah script MainActivity.java dan tambahkan script untuk memanggil url website, object class WebView, dan proses progress bar pada MainActivity.java 
packag nenengevi07.blogspot.com.webview;

import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    WebView webView;
    ProgressBar bar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        webView = (WebView) findViewById(R.id.webView);
        bar=(ProgressBar) findViewById(R.id.progressBar2);
        webView.setWebViewClient(new myWebclient());
        webView.getSettings().setJavaScriptEnabled(true);
        webView.loadUrl("https://nenengevi07.blogspot.com/");
    }
    public class myWebclient extends WebViewClient{
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            bar.setVisibility(View.GONE);
        }
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
        }
        @Override public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return super.shouldOverrideUrlLoading(view, url);
        }
    }
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if((keyCode==KeyEvent.KEYCODE_BACK) && webView.canGoBack()){
            webView.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
}


  • Kemudian  dalam script AndroidManifest.xml seperti dibawah ini: 
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="nenengevi07.blogspot.com.webview">
    <uses-permission android:name="android.permission.INTERNET"/>
    <application
        android:allowBackup="true"
        android:icon="@drawable/neneng"
        android:label="@string/app_name"
        android:roundIcon="@drawable/neneng"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

  • Setelah itu coba kita jalankan menggunakan emulator yang tersedia di Android Studio Anda, maka akan tampil seperti video dibawah ini


https://youtube.com/shorts/6K1fApr9Bzw?feature=share



Sabtu, 12 Juni 2021

BAB 10 MEMBUAT APPS MEDIA PLAYER DAN VIDEO PLAYER PADA ANDROID STUDIO

MediaPlayer

Salah satu komponen terpenting framework media adalah class MediaPlayer. Objek class ini dapat mengambil, mendekode, serta memutar audio dan video dengan sedikit penyiapan. Class ini mendukung beberapa sumber media yang berbeda, seperti:
• Resource lokal
• URI internal, seperti yang mungkin Anda peroleh dari Content Resolver
• URL eksternal (streaming)


Membuat App VidioPlayer 
 
1. Pertama jalankan aplikasi IDE Android Studio, caranya :
a. Pilih Start → Android Studio
b. Pilih → Start a new Android Studio Project

c. Pilih → Empty Activity → Next

Configure Your Project
Name → VidioPlayer
Package Name → ubah menjadi nama blog kalian masing-masing
Save Location → D:\2021\semester 6\TI-2\PAB\ VidioPlayer
Language → Java
Minimum API Level → API 14 → Klik Finish


2. Siapkan sebuah file Video dengan forma file, Buat sebuah direktori/folder engan nama raw di dalam folder ../res/raw dengan cara klik kanan pada folder res lalu pilih New – Directory seperti gambar di bawah ini
3. Copy file video yang telah kita siapkan tadi kedalam folder ../raw dengan cara klik kanan pada folder raw lalu pilih Show in Explore seperti gambar di bawah ini.
 Setelah itu akan tampil windows explorer lalu Paste di dalam folder raw file tadi.


4. Selanjutnya ketikan kode program / script activity_main.xml di bawah ini :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/container"
    android:padding="20dp"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:background="#FA8072"
    android:orientation="vertical">

    <TextView
        android:id="@+id/songName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:textStyle="bold"
        android:layout_margin="20dp"
        android:textColor="#ffffff"
        android:text="Judul vidio"/>

    <VideoView
        android:id="@+id/vidioplay"
        android:layout_width="match_parent"
        android:layout_height="200dp" />

    <TextView
        android:id="@+id/songDuration"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:textColor="#ffffff"
        android:text="Durasi vidio"/>

    <SeekBar
        android:id="@+id/seekBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="30dp"
            android:gravity="center_horizontal"
            android:orientation="horizontal">

            <ImageButton
                android:id="@+id/btn_back"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="14dp"
                android:onClick="backforward"
                android:src="@android:drawable/ic_media_rew"/>

            <ImageButton
                android:id="@+id/btn_pause"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="14dp"
                android:onClick="pause"
                android:src="@android:drawable/ic_media_pause"/>

            <ImageButton
                android:id="@+id/btn_play"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="14dp"
                android:onClick="play"
                android:src="@android:drawable/ic_media_play"/>

            <ImageButton
                android:id="@+id/btn_forward"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="14dp"
                android:onClick="forward"
                android:src="@android:drawable/ic_media_ff"/>
        </LinearLayout>
</LinearLayout>

5. Setelah itu Buka dan ubah script MainActivity.java seperti di bawah ini

package meilaniepu.blogspot.com.vidioplayer;

import android.content.res.AssetFileDescriptor;
import android.media.MediaMetadataRetriever;
import android.net.Uri;
import android.os.Bundle;
import android.media.MediaPlayer;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.SeekBar;
import android.widget.TextView;
import android.os.Handler;
import android.widget.VideoView;

import java.util.concurrent.TimeUnit;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    private MediaPlayer mediaPlayer;
    private TextView songName, songDuration;
    private VideoView videoView;
    private SeekBar seekBar;
    private double timeStart= 0, finalTime = 0;
    private int forwardTime = 20000, backwardTime = 20000;
    private Handler durationHandler = new Handler();
    private boolean swtch = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        songName = (TextView) findViewById(R.id.songName);
        songDuration =(TextView) findViewById(R.id.songDuration);
        mediaPlayer = MediaPlayer.create(this, R.raw.lawschool);
        MediaMetadataRetriever meta = new MediaMetadataRetriever();
        videoView = (VideoView) findViewById(R.id.vidioplay);
        String path = "android.resource://" + getPackageName() + "/" + R.raw.lawschool;
        videoView.setVideoURI(Uri.parse(path));

        seekBar = (SeekBar) findViewById(R.id.seekBar);
        songName.setText("Vidio.mp4");
        seekBar.setOnSeekBarChangeListener(new yourListener() );
        seekBar.setClickable(false);

    }
     private class yourListener implements SeekBar.OnSeekBarChangeListener {
         public void onProgressChanged (SeekBar seekBar, int progress, boolean fromUser){
             if (swtch){
                 videoView.seekTo(progress);
             }
         }
         public void onStartTrackingTouch(SeekBar seekBar) {
             swtch = true;
         }
         public void onStopTrackingTouch(SeekBar seekBar) {
             swtch = false;
         }
     }
     private Runnable updateSeekBarTime = new Runnable() {
        public void run(){
            timeStart = videoView.getCurrentPosition();
            seekBar.setProgress((int) timeStart);
            double timeRemaining = finalTime - timeStart;
            songDuration.setText(String.format("%d min, %d sec",
                    TimeUnit.MILLISECONDS. toMinutes((long) timeRemaining),
                    TimeUnit.MILLISECONDS. toSeconds((long) timeRemaining)-

                    TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) timeRemaining))));
            durationHandler.postDelayed(this, 1000);

        }
     };
    public void play(View view){
        videoView.start();
        finalTime = videoView.getDuration();
        seekBar.setMax((int) videoView.getDuration());
        timeStart = videoView.getCurrentPosition();
        seekBar.setProgress((int) timeStart);
        durationHandler.postDelayed(updateSeekBarTime, 1000);
    }
    public void pause(View view){
        videoView.pause();
    }
    public void forward(View view){
        timeStart = timeStart + forwardTime;
        videoView.seekTo((int) timeStart);
    }
    public void backforward(View view){
        timeStart = timeStart - backwardTime;
        videoView.seekTo((int) timeStart);
    }


}

6. Lalu coba jalankan menggunakan emulator yang tersedia di Android Studio Anda, maka akan tampil seperti gabar dibawah ini



Membuat App MusicPlayer
Menggunakan API MediaPlayer

Langkah Awal sama seperti membuat VidioPlayer
1. Pertama jalankan aplikasi IDE Android Studio, caranya :
a. Pilih Start → Android Studio
b. Pilih → Start a new Android Studio Project
c. Pilih → Empty Activity → Next 
d. Configure Your Project

2. Siapkan sebuah file suara/musik dengan forma file .mp3 dan file gambar headphone dengan jenis file .png 

3. Buat sebuah direktori/folder engan nama raw di dalam folder ../res/raw dengan cara klik kanan pada folder res lalu pilih New – Directory seperti gambar di bawah ini


4. Copy file music.mp3 tadi kedalam folder ../raw dengan cara klik kanan pada folder raw lalu pilih Show in Explore seperti gambar di bawah ini. Setelah itu akan tampil windows explorer lalu Paste di dalam folder raw file music.mp3 tadi


5. Copy kan Kembali file headphone.png yang telah kita siapkan tadike dalam folder ../res/drawable/ sehingga akan tampil struktur project seperti gambar di bawah ini


6. Selanjutnya ketikan kode program / script activity_main.xml seperti di bawah ini

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:background="#0b00a3"
    android:orientation="vertical"
    android:padding="20dp">

    <TextView
        android:id="@+id/songName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="Just as Usual"
        android:textColor="#ffffff"/>
    <ImageView
        android:id="@+id/mp3Icon"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:layout_margin="30dp"
        android:background="#ffffff"
        android:padding="30dp"
        android:src="@drawable/headphone"/>
    <TextView
        android:id="@+id/songDuration"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="Durasi Lagu"
        android:textColor="#ffffff"/>
    <SeekBar
        android:id="@+id/seekBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="30dp"
        android:gravity="center_horizontal">
        <ImageButton
            android:id="@+id/btn_back"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="14dp"
            android:onClick="backforward"
            android:src="@android:drawable/ic_media_rew"/>
        <ImageButton
            android:id="@+id/btn_pause"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="14dp"
            android:onClick="pause"
            android:src="@android:drawable/ic_media_pause"/>
        <ImageButton
            android:id="@+id/btn_Play"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="14dp"
            android:baselineAligned="false"
            android:onClick="play"
            android:src="@android:drawable/ic_media_play"/>
        <ImageButton
            android:id="@+id/btn_forward"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="14dp"
            android:onClick="forward"
            android:src="@android:drawable/ic_media_ff"/>
    </LinearLayout>
</LinearLayout>

7. Setelah itu Buka dan ubah script MainActivity.java seperti di bawah ini

package 07nenengevi.blogspot.musicplayer;

import android.content.res.AssetFileDescriptor;
import android.media.MediaMetadataRetriever;
import android.net.Uri;
import android.os.Bundle;
import android.media.MediaPlayer;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.SeekBar;
import android.widget.TextView;
import android.os.Handler;
import java.util.concurrent.TimeUnit;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
    private MediaPlayer mediaPlayer;
    private TextView songName, songDuration;
    private SeekBar seekBar;
    private double timeStart = 0, finaltime= 0;
    private int forwardtime = 20000, backwardTime = 20000;
    private Handler durationHadler = new Handler();
    private boolean swtch = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        songName = (TextView) findViewById(R.id.songName);
        songDuration = (TextView) findViewById(R.id.songDuration);
        mediaPlayer = MediaPlayer.create(this, R.raw.music);

        MediaMetadataRetriever meta = new MediaMetadataRetriever();

        final AssetFileDescriptor afd = getResources().openRawResourceFd(R.raw.music);
        meta.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());

        String music_duration = meta.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
        finaltime = Long.parseLong(music_duration);

        Log.v("musicDuration", "Duration : "+music_duration);

        seekBar =(SeekBar) findViewById(R.id.seekBar);
        songName.setText("Just as Usual.mp3");
        seekBar.setMax((int) finaltime);
        seekBar.setOnSeekBarChangeListener(new yourListener());
        seekBar.setClickable(false);
    }
    private class yourListener implements SeekBar.OnSeekBarChangeListener {
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            if (swtch){
                mediaPlayer.seekTo(progress);
            }
        }
        public void onStartTrackingTouch(SeekBar seekBar) {
            swtch = true;
        }
        public void onStopTrackingTouch(SeekBar seekBar) {
            swtch = false;
        }
}
private Runnable updateSeekBarTime = new Runnable() {
    @Override
    public void run() {
        timeStart = mediaPlayer.getCurrentPosition();
        seekBar.setProgress((int) timeStart);
    double timeRemaining = finaltime - timeStart;
    songDuration.setText(String.format("%d min, %d sec",
        TimeUnit.MILLISECONDS.toMinutes((long) timeRemaining),
        TimeUnit.MILLISECONDS.toSeconds((long) timeRemaining)-
                TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) timeRemaining))));
    durationHadler.postDelayed(this, 1000);
         }
    };
    public void play(View view) {
        mediaPlayer.start();
        timeStart = mediaPlayer.getCurrentPosition();
        seekBar.setProgress((int) timeStart);
        durationHadler.postDelayed(updateSeekBarTime, 100);
    }
    public void pause(View view) {
        mediaPlayer.pause();
    }
    public void forward(View view) {
        timeStart = timeStart + forwardtime;
        mediaPlayer.seekTo((int) timeStart);
    }
    public void backForward(View view) {
        timeStart = timeStart - backwardTime;
        mediaPlayer.seekTo((int) timeStart);
    }
}

8. Lalu coba jalankan menggunakan emulator yang tersedia di Android Studio atau Hp anda maka akan tampil seperti gabar dibawah ini



BAB 13 CRUD Database MySQL dengan PHP Pada Apk Android Studio

CRUD adalah singkatan dari create, read, update, and delete. Akronim CRUD mengidentifikasi semua fungsi utama yang melekat pada database re...