Membuat Aplikasi CRUD Data Mahasiswa Menggunakan RESTful API di Android Studio


Pada postingan sebelumnya kita telah membuat API CRUD sederhana menggunakan PHP danMYSQL sekarang kita akan mengkonsumsi API yang sudah kita buat tersebut Pada kasus ini saya akan menggunakan API tadi di Projek Android dengan menggunakan library retrofit



Pertama-tama buat projek baru di Android Studio, kemudian tambahkan library retrofit pada build.gradle(module:app) di bagian  despendencies, kemudian klik sync now
implementation 'com.squareup.retrofit:retrofit:1.9.0'

lalu tambahkan network permission pada AndroidManifest
android:name="android.permission.INTERNET" />

android:name="android.permission.ACCESS_NETWORK_STATE" />

Untuk Susunan Folder nya seperti berikut:
Susunan Folder Projek di Android Studio


Kemudian buat Class BaseApp, kelas ini berfungsi untuk kumpulan perintah yang sering digunakan dalam pembuatan program, sehingga nanti dapat digunakan pada class lain. Berikut kode programnya: untuk ROOT_URL karena saya sudah menguploadnya pada web hosting jadi saya menggunakan url yang ada di web hosting saya, jika anda menyimpanya di localhost dan ingin mengaksesnya dari HP ganti url nya menjadi alamat IP komputer anda, dan pastikan HP dan komputer anda menggunakan jaringan wifi yang sama.
public class BaseApp extends AppCompatActivity {

    public static Context c;

    public static final String ROOT_URL = "http://giviews.000webhostapp.com";

    private static final int DEBUG = 1;

    public SessionManager sessionManager;

    AlphaAnimation btnAnimasi = new AlphaAnimation(1F,0.5F);



    public BaseApp() {

        sessionManager = new SessionManager(c);

    }



    @Override

    protected void onCreate(@Nullable Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        c =  this;

    }



    public void pesan(String a){

        Toast.makeText(c, a, Toast.LENGTH_LONG).show();

    }



    //method untuk menghilangkan action bar

    public void fullScreen(){

        requestWindowFeature(Window.FEATURE_NO_TITLE);

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

                WindowManager.LayoutParams.FLAG_FULLSCREEN);

    }



    private class SessionManager {

        public SessionManager(Context c) {

        }

    }

}

selanjutnya membuat class Model Mahasiswa, Class ini berisi geter dan seter yang nanti akan digunakan ketika get data dan set data mahasiswa, berikut kode programnya:
public class DataMahasiswa {

    private String nim;

    private String nama;

    private String alamat;

    private String jurusan;



    public String getNim() {

        return nim;

    }

    public void setNim(String nim) {

        this.nim = nim;

    }

    public String getNama() {

        return nama;

    }

    public void setNama(String nama) {

        this.nama = nama;

    }

    public String getAlamat() {

        return alamat;

    }

    public void setAlamat(String alamat) {

        this.alamat = alamat;

    }

    public String getJurusan() {

        return jurusan;

    }

    public void setJurusan(String jurusan) {

        this.jurusan = jurusan;

    }

}

kemudian buat Class CDataMahasiswa, berikut kode programnya:
public class CDataMahasiswa {





    private List DataMahasiswa = new ArrayList();



    public List getDataMahasiswa() {

        return DataMahasiswa;

    }



    public void setDataMahasiswa(List DataMahasiswa) {

        this.DataMahasiswa = DataMahasiswa;

    }

}

selanjutnya membuat interface ModuleApi.java berikut kode programnya: Class ini berfungsi untuk mengakses API nya
interface ModuleAPI {



    //getdata

    @GET("/server_api/view.php")

    public void getDataMahasiswa(Callback callback);



    //update

    @FormUrlEncoded

    @POST("/server_api/update.php")

    public void updateData(

            @Field("vsnim") String vsnim,

            @Field("vsnama") String vsnama,

            @Field("vsalamat") String vsalamat,

            @Field("vsjurusan") String vsjurusan,

            Callback callback);



    //insert

    @FormUrlEncoded

    @POST("/server_api/create.php")

    public void insertData(

            @Field("vsnim") String vsnim,

            @Field("vsnama") String vsnama,

            @Field("vsalamat") String vsalamat,

            @Field("vsjurusan") String vsjurusan,

            Callback callback);



    //delete

    @FormUrlEncoded

    @POST("/server_api/delete.php")

    public void deleteData(

            @Field("vsnim") String vsnim,

            Callback callback);

    }

Selanjutnya Membuat DataMahasiswaActivity.java berikut kode programnya:
public class DataMahasiswaActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener {

    ProgressDialog progressDialog;

    Dialog dialog, dialog2;

    List listdatamahasiswa;

    String strnim, strnama, strjurusan, stralamat;

    ListView listmahasiswa;

    Button update, delete, reset, insert;

    SwipeRefreshLayout swipeRefreshLayout;

    EditText nimmhs, namamhs, alamatmhs, jurusanmhs;

    AdapterCariMahasiswa cariMahasiswa;



    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_data_mahasiswa);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);

        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);

        fab.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View view) {

                dialog2 = new Dialog(DataMahasiswaActivity.this);

                dialog2.setTitle("data mahasiswa");

                dialog2.setCanceledOnTouchOutside(false);

                dialog2.setContentView(R.layout.tampilaninsertdata);



                nimmhs = (EditText) dialog2.findViewById(R.id.edtnim);

                namamhs = (EditText) dialog2.findViewById(R.id.edtnama);

                jurusanmhs = (EditText) dialog2.findViewById(R.id.edtjurusan);

                alamatmhs = (EditText) dialog2.findViewById(R.id.edtalamat);





                insert = (Button) dialog2.findViewById(R.id.btninsert);

                reset = (Button) dialog2.findViewById(R.id.btnreset);

                reset.setOnClickListener(new View.OnClickListener() {

                    @Override

                    public void onClick(View v) {

                        nimmhs.setText("");

                        namamhs.setText("");

                        alamatmhs.setText("");

                        jurusanmhs.setText("");



                    }

                });

                insert.setOnClickListener(new View.OnClickListener() {

                    @Override

                    public void onClick(View v) {

                        strnim = nimmhs.getText().toString();

                        strnama = namamhs.getText().toString();

                        strjurusan = jurusanmhs.getText().toString();

                        stralamat = alamatmhs.getText().toString();



                        insertDataMahasiswa();

                        getDataMahasiswa();



                    }

                });

                dialog2.show();

            }

        });



        //inisialisasi

        listmahasiswa = (ListView) findViewById(R.id.listmahasiswa);

        swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh_layout);

        swipeRefreshLayout.setOnRefreshListener(this);

        swipeRefreshLayout.post(new Runnable() {

                                    @Override

                                    public void run() {



                                        getDataMahasiswa();

                                    }

                                }

        );

    }



    private void getDataMahasiswa() {

        overridePendingTransition(0, 0);

        progressDialog = ProgressDialog.show(DataMahasiswaActivity.this, "", " Proses...");

        RestAdapter adapter = new RestAdapter.Builder()

                .setEndpoint(ROOT_URL) //Setting the Root URL

                .build(); //Finally building the adapter



        //Creating object for our interface

        ModuleAPI api = adapter.create(ModuleAPI.class);



        //Calling method to get whether report

        api.getDataMahasiswa(



                new Callback() {

                    @Override

                    public void success(CDataMahasiswa cdataMahasiswa, Response response) {

                        listdatamahasiswa = new ArrayList();

                        listdatamahasiswa = cdataMahasiswa.getDataMahasiswa();

                        final String[] nim = new String[listdatamahasiswa.size()];

                        final String[] nama = new String[listdatamahasiswa.size()];

                        final String[] alamat = new String[listdatamahasiswa.size()];

                        final String[] jurusan = new String[listdatamahasiswa.size()];



                        for (int i = 0; i < listdatamahasiswa.size(); i++) {

                            nim[i] = listdatamahasiswa.get(i).getNim().toString();

                            nama[i] = listdatamahasiswa.get(i).getNama().toString();

                            alamat[i] = listdatamahasiswa.get(i).getAlamat().toString();

                            jurusan[i] = listdatamahasiswa.get(i).getJurusan().toString();

                        }



                        cariMahasiswa = new AdapterCariMahasiswa(DataMahasiswaActivity.this, nim, nama,

                                alamat, jurusan);

                        listmahasiswa.setAdapter(cariMahasiswa);

                        listmahasiswa.setOnItemClickListener(new AdapterView.OnItemClickListener() {

                            @Override

                            public void onItemClick(AdapterView parent, View view, int position, long id) {

                                dialog = new Dialog(DataMahasiswaActivity.this);

                                dialog.setTitle("data mahasiswa");

                                dialog.setCanceledOnTouchOutside(false);

                                dialog.setContentView(R.layout.tampilaneditdata);



                                nimmhs = (EditText) dialog.findViewById(R.id.edtnim);

                                namamhs = (EditText) dialog.findViewById(R.id.edtnama);

                                jurusanmhs = (EditText) dialog.findViewById(R.id.edtjurusan);

                                alamatmhs = (EditText) dialog.findViewById(R.id.edtalamat);



                                nimmhs.setEnabled(false);

                                nimmhs.setText(nim[position]);

                                namamhs.setText(nama[position]);

                                jurusanmhs.setText(jurusan[position]);

                                alamatmhs.setText(alamat[position]);

                                update = (Button) dialog.findViewById(R.id.btnupdate);

                                delete = (Button) dialog.findViewById(R.id.btnhapus);

                                reset = (Button) dialog.findViewById(R.id.btnreset);



                                reset.setOnClickListener(new View.OnClickListener() {

                                    @Override

                                    public void onClick(View v) {

                                        nimmhs.setText("");

                                        namamhs.setText("");

                                        alamatmhs.setText("");

                                        jurusanmhs.setText("");



                                    }

                                });

                                update.setOnClickListener(new View.OnClickListener() {

                                    @Override

                                    public void onClick(View v) {

                                        updateDataMahasiswa();

                                        getDataMahasiswa();

                                    }

                                });

                                delete.setOnClickListener(new View.OnClickListener() {

                                    @Override

                                    public void onClick(View v) {

                                        strnim = nimmhs.getText().toString();

                                        hapusDataMahasiswa();

                                        getDataMahasiswa();

                                    }

                                });

                                dialog.show();

                            }

                        });



                        progressDialog.dismiss();

                    }



                    @Override

                    public void failure(RetrofitError error) {



                        String merror = error.getMessage();

                        progressDialog.dismiss();

                        Toast.makeText(DataMahasiswaActivity.this, "err " + merror.toString(),

                                Toast.LENGTH_LONG).show();

                    }

                }



        );





    }



    private void hapusDataMahasiswa() {

        RestAdapter adapter = new RestAdapter.Builder()

                .setEndpoint(ROOT_URL) //Setting the Root URL

                .build(); //Finally building the adapter



        //Creating object for our interface

        ModuleAPI api = adapter.create(ModuleAPI.class);



        //Defining the method insertuser of our interface

        api.deleteData(

                //Passing the values by getting it from editTexts

                strnim.toString(),

                //Creating an anonymous callback

                new Callback() {

                    @Override

                    public void success(Response result, Response response) {

                        Toast.makeText(DataMahasiswaActivity.this, "informasi \n",

                                Toast.LENGTH_SHORT).show();

                        dialog.dismiss();

                    }



                    @Override

                    public void failure(RetrofitError error) {

                        //If any error occured displaying the error as toast

                        Toast.makeText(DataMahasiswaActivity.this, "Kesalahan Koneksi Data",

                                Toast.LENGTH_LONG).show();

                        dialog.setCancelable(false);

                    }

                }

        );



    }



    private void insertDataMahasiswa() {

        RestAdapter adapter = new RestAdapter.Builder()

                .setEndpoint(ROOT_URL) //Setting the Root URL

                .build(); //Finally building the adapter



        //Creating object for our interface

        ModuleAPI api = adapter.create(ModuleAPI.class);



        //Defining the method insertuser of our interface

        api.insertData(

                //Passing the values by getting it from editTexts

                strnim.toString(),

                strnama.toString(),

                stralamat.toString(),

                strjurusan.toString(),



                //Creating an anonymous callback

                new Callback() {

                    @Override

                    public void success(Response result, Response response) {

                        //On success we will read the server's output using bufferedreader

                        //Creating a bufferedreader object

                        BufferedReader reader = null;



                        //An string to store output from the server

                        String output = "";



                        try {

                            //Initializing buffered reader

                            reader = new BufferedReader(new InputStreamReader(result.getBody().in()));



                            //Reading the output in the string

                            output = reader.readLine();

                        } catch (IOException e) {

                            e.printStackTrace();

                        }

                        //  btncall.setEnabled(true);

                        Toast.makeText(DataMahasiswaActivity.this, "informasi \n" + output,

                                Toast.LENGTH_SHORT).show();



                        overridePendingTransition(0, 0);

                        dialog2.dismiss();

                    }



                    @Override

                    public void failure(RetrofitError error) {

                        //If any error occured displaying the error as toast

                        Toast.makeText(DataMahasiswaActivity.this, "Kesalahan Koneksi Data",

                                Toast.LENGTH_LONG).show();

                        dialog2.setCancelable(false);

                        //  btncall.setEnabled(true);

                    }

                }

        );

    }



    private void updateDataMahasiswa() {

        //Here we will handle the http request to insert user to mysql db

        //Creating a RestAdapter

        strnim = nimmhs.getText().toString();

        strnama = namamhs.getText().toString();

        strjurusan = jurusanmhs.getText().toString();

        stralamat = alamatmhs.getText().toString();



        RestAdapter adapter = new RestAdapter.Builder()

                .setEndpoint(ROOT_URL) //Setting the Root URL

                .build(); //Finally building the adapter



        //Creating object for our interface

        ModuleAPI api = adapter.create(ModuleAPI.class);



        //Defining the method insertuser of our interface

        api.updateData(

                //Passing the values by getting it from editTexts

                strnim.toString(),

                strnama.toString(),

                stralamat.toString(),

                strjurusan.toString(),

                //Creating an anonymous callback

                new Callback() {

                    @Override

                    public void success(Response result, Response response) {

                        //On success we will read the server's output using bufferedreader

                        //Creating a bufferedreader object

                        BufferedReader reader = null;



                        //An string to store output from the server

                        String output = "";



                        try {

                            //Initializing buffered reader

                            reader = new BufferedReader(new InputStreamReader(result.getBody().in()));



                            //Reading the output in the string

                            output = reader.readLine();

                            Toast.makeText(DataMahasiswaActivity.this, "informasi \n" + output,

                                    Toast.LENGTH_SHORT).show();

                        } catch (IOException e) {

                            e.printStackTrace();

                        }

                        dialog.dismiss();

                    }



                    @Override

                    public void failure(RetrofitError error) {

                        //If any error occured displaying the error as toast

                        Toast.makeText(DataMahasiswaActivity.this, "Kesalahan Koneksi Data",

                                Toast.LENGTH_LONG).show();

                        dialog.setCancelable(false);

                        //  btncall.setEnabled(true);

                    }

                }

        );

    }



    @Override

    public void onRefresh() {

        getDataMahasiswa();

        swipeRefreshLayout.setRefreshing(false);

        overridePendingTransition(0, 0);

        overridePendingTransition(0, 0);



    }



}

Membuat activity_data_mahasiswa.xml, tambahkan kode berikut:
xml version="1.0" encoding="utf-8"?>

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="giviews.id.crud_mahasiswa.DataMahasiswaActivity">



    
        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:theme="@style/AppTheme.AppBarOverlay">



        
            android:id="@+id/toolbar"

            android:layout_width="match_parent"

            android:layout_height="?attr/actionBarSize"

            android:background="?attr/colorPrimary"

            app:popupTheme="@style/AppTheme.PopupOverlay" />



    



    layout="@layout/data_mahasiswa" />



    
        android:id="@+id/fab"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_gravity="bottom|end"

        android:layout_margin="@dimen/fab_margin"

        app:srcCompat="@android:drawable/ic_dialog_email" />





Kemudian data_mahasiswa.xml disini untuk memasukan listviewnya, berikut ini kode nya:
xml version="1.0" encoding="utf-8"?>


    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:id="@+id/swipe_refresh_layout"

    android:layout_height="match_parent"

    app:layout_behavior="@string/appbar_scrolling_view_behavior"

    tools:showIn="@layout/data_mahasiswa">



    
        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:id="@+id/listmahasiswa">




Membuat AdapterCari Mahasiswa.java, berikut kode programnya:
public class AdapterCariMahasiswa extends BaseAdapter {



    public Context activity;

    private String[] nim, nama, alamat, jurusan;

    public TextView tvnamamahasiswa, tvnim, tvjurusan, tvalamat;

    private static LayoutInflater inflater = null;



    public AdapterCariMahasiswa(DataMahasiswaActivity dataMahasiswaActivity, String[] nim, String[]

            nama, String[] alamat, String[] jurusan) {

        activity = dataMahasiswaActivity;

        this.nim = nim;

        this.nama = nama;

        this.alamat = alamat;

        this.jurusan = jurusan;

    }

    @Override

    public int getCount() {

        return nama.length;

    }



    @Override

    public Object getItem(int position) {

        return position;

    }



    @Override

    public long getItemId(int position) {

        return position;

    }





    @Override

    public View getView(int position, View convertView, ViewGroup parent) {

        LayoutInflater inflater = (LayoutInflater)

                activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        convertView = inflater.inflate(R.layout.layoutlistcarimahasiswa, null);

        tvnamamahasiswa = (TextView) convertView.findViewById(R.id.tvnamamahasiswa);

        tvnim = (TextView) convertView.findViewById(R.id.tvnim);

        tvjurusan = (TextView) convertView.findViewById(R.id.tvjurusan);

        tvalamat = (TextView) convertView.findViewById(R.id.tvalamat);



        tvnamamahasiswa.setText(nama[position].toString());

        tvnim.setText(nim[position].toString());

        tvjurusan.setText(jurusan[position].toString());

        tvalamat.setText(alamat[position].toString());

        return convertView;

    }



}

selanjutnya tambhkan kode berikut pada layoutcarimahasiswa.xml:
xml version="1.0" encoding="utf-8"?>

xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:orientation="vertical">



    
        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:background="#ffffff"

        android:orientation="horizontal">





        
            android:id="@+id/layoutkanan"

            android:layout_width="match_parent"

            android:layout_height="wrap_content"

            android:orientation="horizontal">



            
                android:layout_width="70dp"

                android:layout_height="wrap_content"

                android:orientation="vertical">



                
                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:layout_margin="2dp"

                    android:text="nim"

                    android:textColor="#000000"

                    android:textSize="12sp" />



                
                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:layout_margin="2dp"

                    android:text="nama"

                    android:textColor="#000000"

                    android:textSize="12sp" />





                
                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:layout_margin="2dp"

                    android:text="jurusan"

                    android:textColor="#000000"

                    android:textSize="15sp" />



                
                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:layout_margin="2dp"

                    android:text="alamat"

                    android:textColor="#000000"

                    android:textSize="12sp" />



            



            
                android:layout_width="10dp"

                android:layout_height="wrap_content"

                android:orientation="vertical">



                
                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:layout_margin="2dp"

                    android:text=":"

                    android:textColor="#000000"

                    android:textSize="12sp" />



                
                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:layout_margin="2dp"

                    android:text=":"

                    android:textColor="#000000"

                    android:textSize="12sp" />





                
                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:layout_margin="2dp"

                    android:text=":"

                    android:textColor="#000000"

                    android:textSize="15sp" />



                
                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:layout_margin="2dp"

                    android:text=":"

                    android:textColor="#000000"

                    android:textSize="12sp" />





            


                            android:layout_width="match_parent"
               
android:layout_height="wrap_content"
               
android:orientation="vertical">
                                   
android:id="@+id/tvnim"
                   
android:layout_width="wrap_content"
                   
android:layout_height="wrap_content"
                   
android:layout_margin="2dp"
                    
android:hint="nim"
                   
android:textColor="#000000"
                   
android:textColorHint="#000000"
                   
android:textSize="12sp" />

                                   
android:id="@+id/tvnamamahasiswa"
                   
android:layout_width="wrap_content"
                   
android:layout_height="wrap_content"
                   
android:layout_margin="2dp"
                   
android:hint="nama"
                   
android:textColor="#000000"
                   
android:textColorHint="#000000"
                   
android:textSize="12sp" />


                                   
android:id="@+id/tvjurusan"
                   
android:layout_width="wrap_content"
                    
android:layout_height="wrap_content"
                   
android:layout_margin="2dp"
                   
android:hint="jurusan"
                   
android:textColor="#000000"
                   
android:textColorHint="#000000"
                    
android:textSize="15sp" />

                                   
android:id="@+id/tvalamat"
                   
android:layout_width="wrap_content"
                   
android:layout_height="wrap_content"
                   
android:layout_margin="2dp"
                   
android:hint="alamat"
                   
android:textColor="#000000"
                   
android:textColorHint="#000000"
                   
android:textSize="12sp" />


           


       

 

Kemudian tambahkan kode berikut pada layout tampilaneditdata.xml:
xml version="1.0" encoding="utf-8"?>

xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:app="http://schemas.android.com/apk/res-auto"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical">



    
        android:id="@+id/edtnim"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:hint="nim"

        android:inputType="text"

        android:textSize="25sp" />



    
        android:id="@+id/edtnama"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:hint="nama"

        android:inputType="text"

        android:textSize="25sp" />



    
        android:id="@+id/edtjurusan"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:hint="jurusan"

        android:inputType="text"

        android:textSize="25sp" />



    
        android:id="@+id/edtalamat"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:hint="alamat"

        android:inputType="text"

        android:textSize="25sp" />



    
        android:layout_width="match_parent"

        android:layout_height="wrap_content">

        android:id="@+id/btnupdate"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="update"

            android:layout_weight="1"/>



        android:layout_weight="1"

            android:id="@+id/btnhapus"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="hapus" />

        android:layout_weight="1"

            android:id="@+id/btnreset"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="reset" />





    



Kemudian tambahkan kode berikut pada layout tampilaninserdata.xml :

xml version="1.0" encoding="utf-8"?>

xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:app="http://schemas.android.com/apk/res-auto"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical">



    
        android:id="@+id/edtnim"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:hint="nim"

        android:inputType="text"

        android:textSize="25sp" />



    
        android:id="@+id/edtnama"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:hint="nama"

        android:inputType="text"

        android:textSize="25sp" />



    
        android:id="@+id/edtjurusan"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:hint="jurusan"

        android:inputType="text"

        android:textSize="25sp" />



    
        android:id="@+id/edtalamat"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:hint="alamat"

        android:inputType="text"

        android:textSize="25sp" />



    
        android:layout_width="match_parent"

        android:layout_height="wrap_content">



        android:id="@+id/btninsert"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="insert"

            android:layout_weight="1"/>



        android:layout_weight="1"

            android:id="@+id/btnreset"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="reset" />

    



Selanjutnya jalankan programnya, jika tampil data nya berarti anda telah berhasil membuat program dengan menggunakan Restful Api di android, sekianlah tutorial kali ini semoga bermanfaat, jika ada yang ingin ditanyakan silakan tuliskan pertanyaan anda pada kolom komentar di bawah.

tampilan view Data Mahasiswa
tampilan insert data Mahasiswa
tampilan edit Data Mahasiswa

pentingnya git buat software developer

git adalah salah satu jenis dari VCS (version control system) dengan git kita bisa mempunyai beberapa versi kode dari aplikasi yang sedang kita buat, semacam checkpoint kalau di game. misalnya ketika kita mau nyoba iseng-iseng melakukan sesuatu namun takut error kalau di git kita bisa mengesave versi awal tadi nanti kalau udah terlanjur error kita bisa kembali lagi ke versi yang awal sebelum error di git bisa dilakukan, tapi terserah teman-teman mau dibikin berapa versi dari projek nya, selain itu sangat mudah ketika bekerja dalam tim, misalnya si A mengerjakan fungsi yang ini, Si B mengerjakan fungsi yang itu nanti kalau dua-duanya sudah selesai bisa kita gabungkan menjadi satu kode yang utuh, nah itu dua kegunaan dari Version Control System ini dan git adalah satu jenis dari VCS. 


kita bisa kembali ke kode yang terakhir kita commit, commit adalah salah satu istilah di git ada beberapa istilah dalam git salah satu nya adalah commit, status, add, branch, dll. git bersifat free dan opensource dapat anda unduh di https://git-scm.com disana anda dapat melihat dokumntasi dll. setelah anda download tambahkan dulu PATH nya jika di windows, kemudian buka command line dan ketikan perintah git --verion untuk melihat versi dari git yang terinstall, jika keluar versinya berarti kita telah berhasil menginstall git nya

Cara memulai menggunakan git pada projek aplikasi kita

ketikan perintah git init, git init adalah perintah untuk menginisialisasi/ memulai git pada repo kita


  • git status adalah untuk mentracking apa saja yang udah kita lakukan/rubah, git ini mengawasi seluruh aktivitas pada folder kita, dia bakal ngasih tau dimana ada penambahan / pengurangan line pada kode kita, kita benar-benar bisa ngetrack file-file / folder-folder kita didalamnya
  • git add adalah perintah untuk menambahkan perubahan yang udah kita lakukan dan siap siap untuk di commit
  • git diff adalah untuk melihat status git kita apakah kita udah melakukan perubahan/belum
  • git commit adalah perintah untuk menyimpan perubahan yang kita lakukan, perintahnya git commit -m "untuk memasukan pesan", -m adalah perintah untuk memsukan pesan waktu kita melakukan kommit
  • git log adalah perintah untuk melihat daftar commit kita
  • git log --oneline perintah untuk melihat daftar commit dalam satu baris
  • git checkout adalah perintah untuk kembali pada perubahan terakhir yang kita commit
  • git branch adalah perintah untuk melihat cabang dari vcs kita, cabang default dari git adalah branch master, branch adalah wadah dari commit-commit kita semacam folder nya didalamnya ada log-log commitan kita
  • git reset adalah perintah untuk berpindah ke log lain dan menghapus log-log diatasnya, git reset ada tiga yaitu soft, hard dan mixed
  • git merge adalah perintah untuk menggabungkan beberapa branch menjadi satu
  • jika ada konflik maka kita harus merubahnya secara manual, misalnya kita bekerja pada cabang yang berbeda dan kita sama-sama mengerjakan perubahan pada log pertama dua-duanya setelah kita merge akan ada konflik


perbedaan antara git dengan github

kalau git adalah VCS nya sedangkan github adalah tempat untuk ngehosting VCS nya

dengan git kita jadi mudah mengatur kode kita, kita juga dimudahkan ketika bekerja dalam tim, ok sekianlah pembahasan kita kali ini tentang git semoga bermanfaat

Membuat RESTful API CRUD sederhana dengan PHP

selamat siang kali ini kita akan membuat RESTful API CRUD sederhana dengan PHP

Apa itu API? 

API(Aplication Programming Interface) adalah sebuah web service yang berguna untuk menjembatani aplikasi dengan database, API tidak tergantung pada bahasa pemrograman tertentu, dengan API kita bisa berkomunikasi dengan aplikasi yang berbeda pemrogramanya, Misalnya Aplikasi A menggunakan bahasa PHP dan Aplikasi B menggunakan bahasa Java kita bisa mengakses informasi informasi aplikasi A untuk ditampilkan di aplikasi B dengan bantuan API, jadi kita tidak harus tau dulu database nya apa struktur table nya bagaimana tinggal menggunakan API yang sudah disediakan oleh developer pembuat API di Aplikasi itu. untuk menggunakan API kita harus melihat dulu dokumentasi dari si pembuat API nya, kita tidak bisa berkreatif membuat cara sendiri jadi misalnya untuk mengakses data apa saja yang dapat diakses bagaimana cara mengaksesnya, apakah bersifat publik atau harus menggunakan token semua tergantung si pembuat API nya jadi kita harus membaca dulu dokumentasinya. format yang dipakai biasanya berbentuk XML atau JSON tetapi yang paling sering kita temui berbentuk JSON (Javascript Object Notation). contoh API yang biasa dipakai untuk login adalah facebook misalnya pada situs stackoverflow kita bisa login lewat facebook atau google, API ini tidak tergantung pada satu bahasa pemrograman misalnya facebook menggunakan bahasa PHP dan stackoverflow menggunakan javascript bisa terhubung dan untuk databasenya stackoverflow tidak harus mempunyai database yang sama digunakan oleh facebook. metode yang biasa digunakan dalam API ini biasanya GET, POST, PUT, PATCH, DELETE dll

Jenis-Jenis API

API ada dua jenis yaitu SOAP dan REST tetapi yang paling populer adalah REST API

Softwre untuk membuat API 

untuk membuat API yang anda perlukan hanya text editor, browser, plugin JSON viewer untuk melihat tampilan JSON agar lebih mudah dibaca, POSTMAN untuk mengetest API nya

Buat dulu database nya seperti ini:

-- phpMyAdmin SQL Dump

-- version 4.5.1

-- http://www.phpmyadmin.net

--

-- Host: 127.0.0.1

-- Generation Time: 23 Okt 2018 pada 13.23

-- Versi Server: 10.1.16-MariaDB

-- PHP Version: 5.6.24



SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";

SET time_zone = "+00:00";





/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;

/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;

/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;

/*!40101 SET NAMES utf8mb4 */;



--

-- Database: `cruds`

--



-- --------------------------------------------------------



--

-- Struktur dari tabel `mahasiswa`

--



CREATE TABLE `mahasiswa` (

  `npm` varchar(10) NOT NULL,

  `nama` varchar(100) NOT NULL,

  `prodi` varchar(50) NOT NULL,

  `fakultas` varchar(50) NOT NULL

) ENGINE=InnoDB DEFAULT CHARSET=latin1;



--

-- Dumping data untuk tabel `mahasiswa`

--



INSERT INTO `mahasiswa` (`npm`, `nama`, `prodi`, `fakultas`) VALUES

('000000', 'zero', 'zero prodi', 'zero fakultas'),

('1100001110', 'Dhani', 'Kedokteran', 'Dokter'),

('1111', 'iwan setiawan', 'teknik otomotif', 'teknik '),

('1201110012', 'Indra', 'Sistem Informasi', 'Teknik'),

('12346545', 'Ahmad Fauzila', 'kehutanan', 'ilmu kehutanan'),

('1500110001', 'Jhon', 'Teknik Informatika', 'Teknik'),

('2222', 'Dudi', 'Teknik sipil', 'teknik'),

('88888', 'Delapan Enam', 'Delapan 999', 'Densus 88');



--

-- Indexes for dumped tables

--



--

-- Indexes for table `mahasiswa`

--

ALTER TABLE `mahasiswa`

  ADD PRIMARY KEY (`npm`);



/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;

/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
?>


Langkah Pertama membuat koneksi ke database



define('HOSTNAME','localhost');

define('USERNAME','root');

define('PASSWORD','');

define('DB_NAME','cruds');



$koneksi = new mysqli(HOSTNAME, USERNAME, PASSWORD, DB_NAME) or die (mysqli_errno());



?>


selanjutnya kita akan membuat CREAT



include_once('connection.php');



$npm = addslashes(htmlentities($_POST['npm']));

$nama = addslashes(htmlentities($_POST['nama']));

$prodi = addslashes(htmlentities($_POST['prodi']));

$fakultas = addslashes(htmlentities($_POST['fakultas']));



$insert = "INSERT INTO mahasiswa(npm,nama,prodi,fakultas) VALUES ('$npm','$nama','$prodi','$fakultas')";



$exeinsert = mysqli_query($koneksi,$insert);



$response = array();



if($exeinsert)

{

  $response['code'] =1;

  $response['message'] = "Success! Data Inserted";

}else{

  $response['code'] =0;

  $response['message'] = "Failed! Data Not Inserted";

}



echo json_encode($response);

?>



untuk mengetest nya bisa menggunakan POSTMAN atau melalui browser tetapi kalau melalui browser agak ribet karena harus memasukan url yang panjang

Kemudian kita akan membuat VIEW yaitu API untuk menampilkan data dari program CRUD nya


include_once('connection.php');
$query = "SELECT * FROM mahasiswa";
$result = mysqli_query($koneksi,$query);
$array_data = array();
while($baris = mysqli_fetch_assoc($result))
{
  $array_data[]=$baris;
}

echo json_encode($array_data);
?>



selanjutnya untuk UPDATE seperti dibawah


require_once('connection.php');

$npm = addslashes(htmlentities($_POST['npm']));

$nama = addslashes(htmlentities($_POST['nama']));
$prodi = addslashes(htmlentities($_POST['prodi']));
$fakultas = addslashes(htmlentities($_POST['fakultas']));

$getdata = mysqli_query($koneksi,"SELECT * FROM mahasiswa WHERE npm='$npm'");
$rows = mysqli_num_rows($getdata);

$update = "UPDATE mahasiswa SET nama='$nama',prodi='$prodi',fakultas='$fakultas' WHERE npm='$npm'";
$exequery = mysqli_query($koneksi,$update);

$respose = array();

if($rows > 0)
{
  if($exequery)
  {
    $respose['code'] = 1;
    $respose['message'] = "Updated Success";
  }else{
    $respose['code'] = 0;
    $respose['message'] = "Updated Failed";
  }
}else{
  $respose['code'] = 0;
  $respose['message'] = "Updated Failed, Not data selected";
}
echo json_encode($respose);
?>


terakhir untuk DELETE seperti berikut:



include_once('connection.php');

$npm = addslashes(htmlentities($_POST['npm']));
$getdata = mysqli_query($koneksi,"SELECT * FROM mahasiswa WHERE npm = '$npm'");
$rows = mysqli_num_rows($getdata);

$delete = "DELETE FROM mahasiswa WHERE npm = '$npm'";
$exedelete = mysqli_query($koneksi,$delete);

$respose = array();
if($rows > 0)
{
  if ($exedelete) {
    $respose['code'] = 1;
    $respose['message'] = "Deleted Success";
  }else{
    $respose['code'] = 0;
    $respose['message'] = "Failed to Delete";
  }
}else{
  $respose['code'] = 0;
  $respose['message'] = "Failed to Delete, data Not Found";
}


echo json_encode($respose);
?>



selesai sudah sudah API CRUD nya Create Read Update Delete sudah lengkap

untuk menyembunyikan susunan file pada folder kita bisa menggunakan .htaccess isinya hanya seperti ini Options -Indexes karena kita tidak memiliki file index jadi file-file yang ada dalam folder kita akan ditampilkan semua kalau API nya sudah kita rilis atau diupload ke server akan sangat berbahaya karena hacker akan mudah melihat susunan file kita selain dengan htaccess kita juga bisa membuat file index yang isi nya access denied misalnya