Wednesday, October 25, 2017

[Tutorial] Android Kamera

October 25, 2017 0 Comments
Assalamualaikum Warahmatullah... Halo temen-temen... balik lagi bersama saya Ramadhany si programmer ganteng... Nah guys kali ini saya akan membagi tutorial tentang "Tutorial Androd Kamre"... Oke langsung saja kita masuk ke tutorialnya.... Jangan lupa android studio nya harus sudah dibuka terlebih dahulu... kalo gak di buka.. nanti ngoding nya di mana?? 😂😂



Pertama

Buatlah project baru di android studio kalian... Beri nama project sesuai keinginan kalian... Sebagai contoh saya memberi nama project saya dengan nama "Android Kamera".....

Kedua

Setelah dibuat, tunggu dulu sampa proses gradle project selesai, setelah gradle selesai... Setelah itu, buka AndroidManifests.xml nya, tambahkan fitur untuk kamera nya dan juga tambahkan permission nya

<!-- Accessing camera hardware -->
    <uses-feature android:name="android.hardware.camera" />

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />

Ketiga

Lalu kita lanjut layouting nya di layout activity_main.xml... Jangan lupa, layout nya kita ganti dengan LinearLayout dan orientation vertical.... Dant tambahkan komponen-komponen berkut ini... Kita menambhkan 2 fitur... yaitu untuk camera untuk hasil foto dan juga untuk vidio view....

<LinearLayout
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:gravity="center"
        android:orientation="vertical" >

        <!-- Capture picture button -->
        <Button
            android:id="@+id/btnCapturePicture"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Ambil Foto"
            android:layout_marginBottom="10dp"/>

        <!-- Record video button -->
        <Button
            android:id="@+id/btnRecordVideo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Rekam Vidio" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:orientation="vertical"
        android:padding="10dp">

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Preview"
            android:padding="10dp"
            android:textSize="15dp"/>

        <!-- To display picture taken -->
        <ImageView
            android:id="@+id/imgPreview"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:visibility="gone" />

        <!-- To preview video recorded -->
        <VideoView
            android:id="@+id/videoPreview"
            android:layout_width="wrap_content"
            android:layout_height="400dp"
            android:visibility="gone" />
    </LinearLayout>

Inilah hasil penambahan widget pada activity_main.xml





Keempat

 A. Setelah itu kita buka MainActivity.java.... Lalu copy code ini di atas methode onCreate...

 // Activity request codes
        private static final int CAMERA_CAPTURE_IMAGE_REQUEST_CODE = 100;
        private static final int CAMERA_CAPTURE_VIDEO_REQUEST_CODE = 200;
        public static final int MEDIA_TYPE_IMAGE = 1;
        public static final int MEDIA_TYPE_VIDEO = 2;

        // directory name to store captured images and videos
        private static final String IMAGE_DIRECTORY_NAME = "Hello Camera";

        private Uri fileUri; // file url to store image/video

        // widget-widget layout activity_main.xml
        private ImageView imgPreview;
        private VideoView videoPreview;
        private Button btnCapturePicture, btnRecordVideo;

 B. Selanjutnya adalah kenalkan widget-widget yang ada di layout activty_main.xml..... 

     imgPreview = (ImageView) findViewById(R.id.imgPreview);
                           videoPreview = (VideoView) findViewById(R.id.videoPreview);
                           btnCapturePicture = (Button) findViewById(R.id.btnCapturePicture);

                           btnRecordVideo = (Button) findViewById(R.id.btnRecordVideo);


 C. Setelah di kenalkan widget nya, langkah selanjutnya adalah berikan button nya action untuk membuka           kamera nya

 /**
             * Capture image button click event
             */
            btnCapturePicture.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // capture picture
                    captureImage();
                }
            });

            /**
             * Record video button click event
             */
            btnRecordVideo.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // record video
                    recordVideo();
                }
            });


 D. Langkah selanjutnya adalah, kita cek dulu apakah kamera tersedia di android nya atau tidak, dan kita periksa apakan si android ini memiliki kamera atau tidak

// Checking camera availability
            if (!isDeviceSupportCamera()) {
                Toast.makeText(getApplicationContext(),
                        "Sorry! Your device doesn't support camera",
                        Toast.LENGTH_LONG).show();
                // will close the app if the device does't have camera
                finish();
            }
        }

        /**
         * Checking device has camera hardware or not
         */
        private boolean isDeviceSupportCamera() {
            if (getApplicationContext().getPackageManager().hasSystemFeature(
                    PackageManager.FEATURE_CAMERA)) {
                // this device has a camera
                return true;
            } else {
                // no camera on this device
                return false;
            }
        }


 E. Selanjutnya adalah kode untuk menangkap gambar kamera akan memanfaatkan pengambilan gambar kamera terbaik dan Di sini kita menyimpan file url karena akan null setelah kembali dari aplikasi kamera

/** * Capturing Camera Image will lauch camera app requrest image capture */ private void captureImage() { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // start the image capture Intent startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE); } /** * Here we store the file url as it will be null after returning from camera * app */ @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); // save file url in bundle as it will be null on scren orientation // changes outState.putParcelable("file_uri", fileUri); }

       @Override
        protected void onRestoreInstanceState(Bundle savedInstanceState) {
            super.onRestoreInstanceState(savedInstanceState);

            // get the file url
            fileUri = savedInstanceState.getParcelable("file_uri");
        }

 F. Selanjutnya adalah Bikin method untuk recording vidio... 

 private void recordVideo() {
            Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);

            fileUri = getOutputMediaFileUri(MEDIA_TYPE_VIDEO);

            // set video quality
            intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);

            intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file
            // name

            // start the video capture Intent
            startActivityForResult(intent, CAMERA_CAPTURE_VIDEO_REQUEST_CODE);
        }


 G. Stelah membuat method recordVidio(), langkah selanjut nya adalah menerima method hasil aktivitas akan dipanggil setelah menutup kamera... Berikut adalah code nya

/**
         * Receiving activity result method will be called after closing the camera
         */
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            // if the result is capturing Image
            if (requestCode == CAMERA_CAPTURE_IMAGE_REQUEST_CODE) {
                if (resultCode == RESULT_OK) {
                    // successfully captured the image
                    // display it in image view
                    previewCapturedImage();
                } else if (resultCode == RESULT_CANCELED) {
                    // user cancelled Image capture
                    Toast.makeText(getApplicationContext(),
                            "User cancelled image capture", Toast.LENGTH_SHORT)
                            .show();
                } else {
                    // failed to capture image
                    Toast.makeText(getApplicationContext(),
                            "Sorry! Failed to capture image", Toast.LENGTH_SHORT)
                            .show();
                }
            } else if (requestCode == CAMERA_CAPTURE_VIDEO_REQUEST_CODE) {
                if (resultCode == RESULT_OK) {
                    // video successfully recorded
                    // preview the recorded video
                    previewVideo();
                } else if (resultCode == RESULT_CANCELED) {
                    // user cancelled recording
                    Toast.makeText(getApplicationContext(),
                            "User cancelled video recording", Toast.LENGTH_SHORT)
                            .show();
                } else {
                    // failed to record video
                    Toast.makeText(getApplicationContext(),
                            "Sorry! Failed to record video", Toast.LENGTH_SHORT)
                            .show();
                }
            }
        }


 H. Selanjutnya adalah, Kita tampilkan gambar ke dalam image view... Berikut adalah kodingan nya

/**
         * Display image from a path to ImageView
         */
        private void previewCapturedImage() {
            try {
                // hide video preview
                videoPreview.setVisibility(View.GONE);

                imgPreview.setVisibility(View.VISIBLE);

                // bimatp factory
                BitmapFactory.Options options = new BitmapFactory.Options();

                // downsizing image as it throws OutOfMemory Exception for larger
                // images
                options.inSampleSize = 8;

                final Bitmap bitmap = BitmapFactory.decodeFile(fileUri.getPath(),
                        options);

                imgPreview.setImageBitmap(bitmap);
            } catch (NullPointerException e) {
                e.printStackTrace();
            }
        }


 I. Setalah kita menampilkan foto ke image view, selanjutnya adalah kita tinjau rekaman vidio yang di rekam

/**
         * Previewing recorded video
         */
        private void previewVideo() {
            try {
                // hide image preview
                imgPreview.setVisibility(View.GONE);

                videoPreview.setVisibility(View.VISIBLE);
                videoPreview.setVideoPath(fileUri.getPath());
                // start playing
                videoPreview.start();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }


 J. Selanjutnya adalah, helper method, metode berikut di kelas aktivitas utama Anda. Metode ini membantu dalam membuat dan mendapatkan file dari kartu SD.

/**
         * Creating file uri to store image/video
         */
        public Uri getOutputMediaFileUri(int type) {
            return Uri.fromFile(getOutputMediaFile(type));
        }

        /**
         * returning image / video
         */
        private static File getOutputMediaFile(int type) {

            // External sdcard location
            File mediaStorageDir = new File(
                    Environment
                            .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
                    IMAGE_DIRECTORY_NAME);

            // Create the storage directory if it does not exist
            if (!mediaStorageDir.exists()) {
                if (!mediaStorageDir.mkdirs()) {
                    Log.d(IMAGE_DIRECTORY_NAME, "Oops! Failed create "
                            + IMAGE_DIRECTORY_NAME + " directory");
                    return null;
                }
            }

            // Create a media file name
            String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss",
                    Locale.getDefault()).format(new Date());
            File mediaFile;
            if (type == MEDIA_TYPE_IMAGE) {
                mediaFile = new File(mediaStorageDir.getPath() + File.separator
                        + "IMG_" + timeStamp + ".png");
            } else if (type == MEDIA_TYPE_VIDEO) {
                mediaFile = new File(mediaStorageDir.getPath() + File.separator
                        + "VID_" + timeStamp + ".mp4");
            } else {
                return null;
            }

            return mediaFile;
        }


Berikut ini adalah kode lengkap pada MainActivity.java.....

import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import android.widget.VideoView;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class MainActivity extends AppCompatActivity {

        // Activity request codes
        private static final int CAMERA_CAPTURE_IMAGE_REQUEST_CODE = 100;
        private static final int CAMERA_CAPTURE_VIDEO_REQUEST_CODE = 200;
        public static final int MEDIA_TYPE_IMAGE = 1;
        public static final int MEDIA_TYPE_VIDEO = 2;

        // directory name to store captured images and videos
        private static final String IMAGE_DIRECTORY_NAME = "Hello Camera";

        private Uri fileUri; // file url to store image/video

        private ImageView imgPreview;
        private VideoView videoPreview;
        private Button btnCapturePicture, btnRecordVideo;

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

            imgPreview = (ImageView) findViewById(R.id.imgPreview);
            videoPreview = (VideoView) findViewById(R.id.videoPreview);
            btnCapturePicture = (Button) findViewById(R.id.btnCapturePicture);
            btnRecordVideo = (Button) findViewById(R.id.btnRecordVideo);

            /**
             * Capture image button click event
             */
            btnCapturePicture.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // capture picture
                    captureImage();
                }
            });

            /**
             * Record video button click event
             */
            btnRecordVideo.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // record video
                    recordVideo();
                }
            });

            // Checking camera availability
            if (!isDeviceSupportCamera()) {
                Toast.makeText(getApplicationContext(),
                        "Sorry! Your device doesn't support camera",
                        Toast.LENGTH_LONG).show();
                // will close the app if the device does't have camera
                finish();
            }
        }

        /**
         * Checking device has camera hardware or not
         */
        private boolean isDeviceSupportCamera() {
            if (getApplicationContext().getPackageManager().hasSystemFeature(
                    PackageManager.FEATURE_CAMERA)) {
                // this device has a camera
                return true;
            } else {
                // no camera on this device
                return false;
            }
        }

        /**
         * Capturing Camera Image will lauch camera app requrest image capture
         */
        private void captureImage() {
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

            fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);

            intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);

            // start the image capture Intent
            startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE);
        }

        /**
         * Here we store the file url as it will be null after returning from camera
         * app
         */
        @Override
        protected void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);

            // save file url in bundle as it will be null on scren orientation
            // changes
            outState.putParcelable("file_uri", fileUri);
        }

        @Override
        protected void onRestoreInstanceState(Bundle savedInstanceState) {
            super.onRestoreInstanceState(savedInstanceState);

            // get the file url
            fileUri = savedInstanceState.getParcelable("file_uri");
        }

        /**
         * Recording video
         */
        private void recordVideo() {
            Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);

            fileUri = getOutputMediaFileUri(MEDIA_TYPE_VIDEO);

            // set video quality
            intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);

            intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file
            // name

            // start the video capture Intent
            startActivityForResult(intent, CAMERA_CAPTURE_VIDEO_REQUEST_CODE);
        }

        /**
         * Receiving activity result method will be called after closing the camera
         */
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            // if the result is capturing Image
            if (requestCode == CAMERA_CAPTURE_IMAGE_REQUEST_CODE) {
                if (resultCode == RESULT_OK) {
                    // successfully captured the image
                    // display it in image view
                    previewCapturedImage();
                } else if (resultCode == RESULT_CANCELED) {
                    // user cancelled Image capture
                    Toast.makeText(getApplicationContext(),
                            "User cancelled image capture", Toast.LENGTH_SHORT)
                            .show();
                } else {
                    // failed to capture image
                    Toast.makeText(getApplicationContext(),
                            "Sorry! Failed to capture image", Toast.LENGTH_SHORT)
                            .show();
                }
            } else if (requestCode == CAMERA_CAPTURE_VIDEO_REQUEST_CODE) {
                if (resultCode == RESULT_OK) {
                    // video successfully recorded
                    // preview the recorded video
                    previewVideo();
                } else if (resultCode == RESULT_CANCELED) {
                    // user cancelled recording
                    Toast.makeText(getApplicationContext(),
                            "User cancelled video recording", Toast.LENGTH_SHORT)
                            .show();
                } else {
                    // failed to record video
                    Toast.makeText(getApplicationContext(),
                            "Sorry! Failed to record video", Toast.LENGTH_SHORT)
                            .show();
                }
            }
        }

        /**
         * Display image from a path to ImageView
         */
        private void previewCapturedImage() {
            try {
                // hide video preview
                videoPreview.setVisibility(View.GONE);

                imgPreview.setVisibility(View.VISIBLE);

                // bimatp factory
                BitmapFactory.Options options = new BitmapFactory.Options();

                // downsizing image as it throws OutOfMemory Exception for larger
                // images
                options.inSampleSize = 8;

                final Bitmap bitmap = BitmapFactory.decodeFile(fileUri.getPath(),
                        options);

                imgPreview.setImageBitmap(bitmap);
            } catch (NullPointerException e) {
                e.printStackTrace();
            }
        }

        /**
         * Previewing recorded video
         */
        private void previewVideo() {
            try {
                // hide image preview
                imgPreview.setVisibility(View.GONE);

                videoPreview.setVisibility(View.VISIBLE);
                videoPreview.setVideoPath(fileUri.getPath());
                // start playing
                videoPreview.start();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        /**
         * ------------ Helper Methods ----------------------
         * */

        /**
         * Creating file uri to store image/video
         */
        public Uri getOutputMediaFileUri(int type) {
            return Uri.fromFile(getOutputMediaFile(type));
        }

        /**
         * returning image / video
         */
        private static File getOutputMediaFile(int type) {

            // External sdcard location
            File mediaStorageDir = new File(
                    Environment
                            .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
                    IMAGE_DIRECTORY_NAME);

            // Create the storage directory if it does not exist
            if (!mediaStorageDir.exists()) {
                if (!mediaStorageDir.mkdirs()) {
                    Log.d(IMAGE_DIRECTORY_NAME, "Oops! Failed create "
                            + IMAGE_DIRECTORY_NAME + " directory");
                    return null;
                }
            }

            // Create a media file name
            String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss",
                    Locale.getDefault()).format(new Date());
            File mediaFile;
            if (type == MEDIA_TYPE_IMAGE) {
                mediaFile = new File(mediaStorageDir.getPath() + File.separator
                        + "IMG_" + timeStamp + ".png");
            } else if (type == MEDIA_TYPE_VIDEO) {
                mediaFile = new File(mediaStorageDir.getPath() + File.separator
                        + "VID_" + timeStamp + ".mp4");
            } else {
                return null;
            }

            return mediaFile;
        }

    }

Ketika semua kode sudah komplit... Maka yang terakhir adalah tinggal run aplikasinya...

Berikut adalah hasil running aplikasinya

 a. hasil menambahkan foto


 b. Hasil menambahkan vidio....



Mungkin cukup sekian yang bisa saya sampaikan pada hari ini.... Semoga bisa bermanfaat bagi saya dan kita semua Amin... Apabila ada kesalahan kata mohon di maafkan... Karena kesalahan itu datang nya dari Syaitan dan Kebaikan itu datang nya dari Allah Ta'ala... Sekaian Dari saya Wasslamualaikum Warahmarullah







Tuesday, October 24, 2017

[Tutorial] Cara Push Project Android Studio Ke GitLab

October 24, 2017 0 Comments
Assalamualaikum Warahmatullah... Halo temen-temen... balik lagi bersama saya Ramadhany si programmer ganteng... Nah guys kali ini saya akan membagi tutorial tentang "Cara Push Project Android Studio Ke GitLab" Sebelum kalian masuk ke tutorial ini.. Kalian harus tau apa pengertian dari GitLab... Kalo kalian belum tau kalian bisa mengunjungi artikel berikut Pengertian GitLab Dan Tutorial Cara Membuat Project GitLab Dengan Mudah..... Kalo sudah paham, kalian bisa mengikuti tutorial ini.....






Oke kita langsung masuk ke tutorial nya.... 


Pertama

Buka GitLab Bash kalian.... nanti setelah di buka, akan muncul seperti ini


Kedua

Kalian Clone terlebih dahulu project anda di git bash anda

Ketiga

Buatlah folder dengan nama project gitlab anda.... Di sini saya memberi nama folder dengan LatihanPertamaKu

Keempat

setelah di clone dan buat project, langkah selanjunya adalah kalian masuk ke folder project gitlab dengan git bash kalian,


Bila sudah seperti ini berati tandanya anda sudah masuk ke folder project anda

Kelima

copy project Android Studio anda ke dalam folder yang sudah kamu buat tadi...



Keenam

kalian add folder tadi ke dalam project gitlab nya... 

A. add terlebih dahulu folder nya... berikut adalah perintah untuk add folder ke project


git add Latihan1

Ini hasil ketika sudah add folder project android studio kalian

B.  Setelah di add, langkah selanjutnya yaitu kita commit terlebih dahulu project nya, berikut adalah perintah nya


git commit -m "add Project Latihan1"

Jika sudah seperti ini, berati itu tandanya kalian berhasil commit project android studio kalian

C. Langkah terakhir adalah kalian tinggal push project android studio nya... Berikut adalah perintah untuk push di dalam gitlab



git push -u origin master



kalau sudah seperti ini.. Berati anda sudah berhasil push project android studio anda ke dalam gitlab

Keenam

Langkah terakhir yaitu tinggal anda cek.. Apakah project android studio anda sudah tersimpan di gitlab atau belum... Coba lihat di project GitLab anda kemudian Refresh halaman project anda... Bila sudah di Refresh halaman project akan berubah seperti ini





Mungkin cukup sekian yang bisa saya sampaikan pada hari ini.... Semoga bisa bermanfaat bagi saya dan kita semua Amin... Apabila ada kesalahan kata mohon di maafkan... Karena kesalahan itu datang nya dari Syaitan dan Kebaikan itu datang nya dari Allah Ta'ala... Sekaian Dari saya Wasslamualaikum Warahmarullah




Monday, October 23, 2017

[Tutorial] Pengertian GitLab Dan Tutorial Cara Membuat Project GitLab Dengan Mudah

October 23, 2017 3 Comments
Assalamualaikum Warahmatullah... Halo temen-temen... balik lagi bersama saya Ramadhany si programmer ganteng... Nah guys kali ini saya akan membagi tutorial tentang "Cara Membuat Projek di GitLab".... Sebelum masuk ke tutorial saya akan menjelaskan apa pengertian dari gitlab...



GitLab adalah sebuah manajer repositori Git berbasis web dengan fitur wiki dan pelacakan masalah, menggunakan lisensi sumber terbuka, dikembangkan oleh GitLab Inc. Perangkat lunak ini ditulis oleh Dmitriy Zaporozhets dan Valery Sizov... Mereka berdua berasal dari Ukraina....
sebuah software pengelola repository git yang cepat,aman dan handal. Ynag di tuliskan  dalam Ruby on rails dan gitolie

Menurut laporan pada Desember 2016,Gitlab telah memiliki 150 anggota tim dan lebih dari 1.400 proyek open source yang telah berkontribusi dari berbagi organisasi yaitu IBM,sony,nasa.
Gitlab 6.5.0 kali ini mendapatkan upgrade Bootstrap dari versi 2 ke versi 3, sehingga tampilan responsive-nya semakin matang dan lebih segar dari sebelumnya. Selain itu, versi 6.5.0 juga memperkenalkan fasilitas comment dengan AJAX, kemampuan mengubah penanggungjawab “issue” dan milestone sebuah repo.

Gimana....?? Sudah paham belum apa itu GitLab?? Pasti sudah kan?? Hehehe 😀😀

Oke, Langsung saja kita masuk Ke tutorial...

Membuat Project Pertama di GitLab

Pertama

Kalian sudah bikin akun GitLab nya belum.... Kalo belum kalian bisa daftar di sini....


Ini adalah halaman ketika Daftar GitLab

Kedua

Setelah kalian daftar... Langsung login saja ke GitLab... Dan ini adalah tampilan Home GitLab... Lalu langsung saja tekan tombol "New Project"



Ketiga

Setelah klik tombol "New Project" kalian akan masuk ke halaman ini.. disini anda di minta untuk memberi nama projek anda... Sebagai contoh, Saya akan memberi nama project saya dengan "LatihanPertamaKu"....  Kalau kalian ingin memberi deskripsi pada project anda silahkan saja...
Lalu Tekan tombol "Create Project"


Keempat

Setelah kalian membuat project baru..... akan muncul tampilan project anda seperti ini



Kelima

Ketika kalian membuat project baru di GitLab, kalian akan dapat perintah-perintah untuk membuat Repository baru... Di bawah ini adalah Command Line Instructions GitLab

// untuk login kedalam gitlab melalui command line gitlab bash
Git global setup

git config --global user.name "Ramadhany"
git config --global user.email "mang.benta@gmail.com"

// membuat repository baru
Create a new repository

git clone https://gitlab.com/Rama_LFC/LatihanPertamaKu.git
cd LatihanPertamaKu
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master

// keluar dari folder
Existing folder

cd existing_folder
git init
git remote add origin https://gitlab.com/Rama_LFC/LatihanPertamaKu.git
git add .
git commit -m "Initial commit"
git push -u origin master

// keluar dari repository git
Existing Git repository

cd existing_repo
git remote add origin https://gitlab.com/Rama_LFC/LatihanPertamaKu.git
git push -u origin --all
git push -u origin --tags


Mungkin cukup sekian yang bisa saya sampaikan pada hari ini.... Semoga bisa bermanfaat bagi saya dan kita semua Amin... Apabila ada kesalahan kata mohon di maafkan... Karena kesalahan itu datang nya dari Syaitan dan Kebaikan itu datang nya dari Allah Ta'ala... Sekaian Dari saya Wasslamualaikum Warahmarullah
























Wednesday, October 18, 2017

[Tutorial] Cara Login Dan Register Menggunakan Retrofit2 Dan API Server Di Android

October 18, 2017 6 Comments

Assalamualaikum Warahmatullah..  

Halo temen-temen, kembali lagi bersama saya Ramadhany si programmer ganteng.. Ok temen-temen, sekarang saya mau membagi ilmu lagi yaitu tentang "Cara Login Dan Register Menggunakan Retrofit2 Dan API Server Di Android". Isi dari tutorial ini adalah jadi si user ini bisa login dan juga register yang data nya itu akan di simpan di server. Didalam Retrofit2 ini kalian bisa request ke API dengan method POST, GET, DELETE, UPDATE dan lain-lain. Dan kalo misalkan kalian masih bingung tentang retrofit, kalian bisa mengunjungi situs resmi retrofit nya   Situs Retrofit.... Oke langsung aja kita mulai saja



Pertama

Langkah yang pertama adalah siapkan dulu API Login dan registernya. Apabila kalian belum punya API nya, kalian bisa kunjingi tutorial ini terlebih dahulu..  Membuat API Login dan Register Dengan PHP MySQL

Kedua 

Buka Android Studio kalian, lalu buat lah project baru sesuai dengan keinginan kalian. Sebagai contoh saya memberi nama project saya dengan "Latihan1"

Ketiga

Buat EmptyActivity Seperti biasa, Lalu buat MainActivity.java nya. Lalu tekan Finish.

Keempat

Lalu langkah selanjut nya adalah buatlah sturktur seperti di bawah ini.


Kelima

Bukalah AndroidManifests.xml nya lalu tambahkan user permission Internet nya seperti di bawah ini

<uses-permission android:name="android.permission.INTERNET" />

Keenam

Buka layout activity_daftar.xml lalu tambahkan widget-widget seperti di bawah ini


'<TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="Register Activity"
        android:textSize="30sp"
        tools:layout_editor_absoluteX="102dp"
        android:textStyle="bold"
        tools:layout_editor_absoluteY="28dp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="40dp" />


    <LinearLayout
        android:layout_width="368dp"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:padding="16dp"
        android:orientation="vertical"
        tools:layout_editor_absoluteY="90dp"
        tools:layout_editor_absoluteX="8dp"
        android:id="@+id/linearLayout">


        <EditText
            android:id="@+id/etNama"
            android:layout_marginTop="8dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Nama"
            android:padding="8dp"
            android:inputType="textEmailAddress"
            android:textColor="#000"/>

        <EditText
            android:id="@+id/etEmail"
            android:layout_marginTop="8dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Email"
            android:padding="8dp"
            android:inputType="textEmailAddress"
            android:textColor="#000"/>

        <EditText
            android:id="@+id/etPassword"
            android:layout_marginTop="8dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Password"
            android:inputType="textPassword"
            android:padding="8dp"
            android:textColor="#000"/>


        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dp"
            android:id="@+id/btnRegister"
            android:text="Register" />



    </LinearLayout>

    <TextView
        android:id="@+id/txtLogin"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="Alreadey have an account ? Login here "
        android:textColor="#0011ff"
        android:layout_below="@+id/linearLayout"
        android:layout_alignParentStart="true"
        android:layout_marginTop="53dp" />'

Ketujuh

Setelah di buat, langkah selanjutnya buka layout activity_login.xml.. Lalu tambahkan komponen-komponen seperti di bawah ini

'<TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="Login Activity"
            android:textSize="30sp"
            tools:layout_editor_absoluteX="102dp"
            android:textStyle="bold"
            tools:layout_editor_absoluteY="28dp"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="40dp" />


        <LinearLayout
            android:layout_width="368dp"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:padding="16dp"
            android:orientation="vertical"
            tools:layout_editor_absoluteY="90dp"
            tools:layout_editor_absoluteX="8dp">


            <EditText
                android:id="@+id/etEmail"
                android:layout_marginTop="8dp"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Email"
                android:padding="8dp"
                android:inputType="textEmailAddress"
                android:textColor="#000"/>

            <EditText
                android:id="@+id/etPassword"
                android:layout_marginTop="8dp"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Password"
                android:inputType="textPassword"
                android:padding="8dp"
                android:textColor="#000"/>

            <Button
                android:id="@+id/btnLogin"
                android:layout_marginTop="16dp"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="LOG IN"/>

            <Button
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="16dp"
                android:id="@+id/btnRegister"
                android:text="Register"
                />


        </LinearLayout>'


Kedelapan

Tambahkan library-library berikut ini.. Lalu copy di gradle:app

compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'

Kesembilan

Buka class java RetrofitClient.java yang sudah kalian bikin sebelumnya. Lalu tambahkan code berikut ini

'private static Retrofit retrofit = null;

    public static Retrofit getClient(String baseUrl){
        HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
        interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build();

        if (retrofit == null){
            retrofit = new Retrofit.Builder()
                    .baseUrl(baseUrl)
                    .addConverterFactory(GsonConverterFactory.create())
                    .client(client)
                    .build();
        }
        return retrofit;
    }'

Kesepuluh

Buka class Interface ApiService.java. Class ini berfungsi untuk mengisi perintah-perintah apa saja yang diperlukan untuk berkomunikasi dengan API. Seperti GET,POST,UPDATE, DELETE.

'// Fungsi ini untuk memanggil API http://192.168.88.20/latihan1/login.php
 // penamaan link sesuai dengan localhost masing-masing
    @FormUrlEncoded
    @POST("login.php")
    Call<ResponseBody> loginRequest(@Field("email") String email,
                                    @Field("password") String password);

    // Fungsi ini untuk memanggil API http://192.168.88.20/latihan1/register.php

    @FormUrlEncoded
    @POST("register.php")
    Call<ResponseBody> registerRequest(@Field("nama") String nama,
                                       @Field("email") String email,
                                       @Field("password") String password);
}'


Kesebelas

Buka Class UtilsApi.java . Class ini berfungsi untuk menggabungkan class RetrofitClient dan juga meng-deklarasikan class interface BaseApiService .

' // 10.0.2.2 ini adalah localhost.
    // bisa juga di masukan dengan IP address kalian
    public static final String BASE_URL_API =
            "http://192.168.88.20/latihan1/";

    // Mendeklarasikan Interface BaseApiService
    public static ApiService getAPIService(){
        return RetrofitClient.getClient(BASE_URL_API).create(ApiService.class);
    }'

Keduabelas

Selanjutnya adalah buka Activity LoginActivity.java .  Kita Deklarasikan terlebih dahulu komponen-komponen yang ada di dalam layout activity_login.xml . 

    'EditText etEmail;
    EditText etPassword;
    Button btnLogin;
    Button btnRegister;
    ProgressDialog loading;

    Context mContext;
    ApiService mApiService;
'

Di dalam method onCreate, tambahkan code ini

'mContext = this;
        mApiService = UtilsApi.getAPIService(); // meng-init yang ada di package apihelper
        initComponents();'

Setelah membuat method initComponents(); lalu tambahkan code berikut

' etEmail = (EditText) findViewById(R.id.etEmail);
        etPassword = (EditText) findViewById(R.id.etPassword);
        btnLogin = (Button) findViewById(R.id.btnLogin);
        btnRegister = (Button) findViewById(R.id.btnRegister);

        btnLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                loading = ProgressDialog.show(mContext, null, "Harap Tunggu...", true, false);
                requestLogin();
            }
        });

        btnRegister.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(mContext, DaftarActivity.class));
            }
        });'

Setelah itu buat methode requestLogin(); lalu tambahkan kode seperti di bawah ini

'mApiService.loginRequest(etEmail.getText().toString(), etPassword.getText().toString())
                    .enqueue(new Callback<ResponseBody>() {
                        @Override
                        public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                            if (response.isSuccessful()){
                                loading.dismiss();
                                try {
                                    JSONObject jsonRESULTS = new JSONObject(response.body().string());
                                    if (jsonRESULTS.getString("error").equals("false")){
                                        // Jika login berhasil maka data nama yang ada di response API
                                        // akan diparsing ke activity selanjutnya.
                                        Toast.makeText(mContext, "BERHASIL LOGIN", Toast.LENGTH_SHORT).show();
                                        String nama = jsonRESULTS.getJSONObject("user").getString("nama");
                                        Intent intent = new Intent(mContext, MainActivity.class);
                                        intent.putExtra("result_nama", nama);
                                        startActivity(intent);
                                    } else {
                                        // Jika login gagal
                                        String error_message = jsonRESULTS.getString("error_msg");
                                        Toast.makeText(mContext, error_message, Toast.LENGTH_SHORT).show();
                                    }
                                } catch (JSONException e) {
                                    e.printStackTrace();
                                } catch (IOException e) {
                                    e.printStackTrace();
                                }
                            } else {
                                loading.dismiss();
                            }
                        }

                        @Override
                        public void onFailure(Call<ResponseBody> call, Throwable t) {
                            Log.e("debug", "onFailure: ERROR > " + t.toString());
                            loading.dismiss();
                        }
                    });'

Keempatbelas

Buka Activity DaftarActivity.java . Lalu tambahkan code berikut ini

   'EditText etNama;
    EditText etEmail;
    EditText etPassword;
    Button btnRegister;
    TextView txtLogin;
    ProgressDialog loading;

    Context mContext;
    ApiService mApiService;'

Selanjutnya adalah tambahkan lagi code berikut di dalam method onCreate

'mContext = this;
        mApiService = UtilsApi.getAPIService();
        // methode ini berfungsi untuk mendeklarasikan widget yang ada
        // di layout activity_daftar
        initComponents();'

Setelah itu adalah, tambahkan kembali code berikut di dalam method initComponents(); 

'etNama = (EditText) findViewById(R.id.etNama);
        etEmail = (EditText) findViewById(R.id.etEmail);
        etPassword = (EditText) findViewById(R.id.etPassword);
        btnRegister = (Button) findViewById(R.id.btnRegister);
        txtLogin = (TextView) findViewById(R.id.txtLogin);


        btnRegister.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                loading = ProgressDialog.show(mContext, null, "Harap Tunggu...", true, false);
                requestRegister();
            }
        });

        txtLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(getApplicationContext(), LoginActivity.class));
            }
        });'

Selanjutnya adalah tambahkan code berikut di dalam method requestRegister(); 

' mApiService.registerRequest(etNama.getText().toString(),
                    etEmail.getText().toString(),
                    etPassword.getText().toString())
                    .enqueue(new Callback<ResponseBody>() {
                        @Override
                        public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                            if (response.isSuccessful()){
                                Log.i("debug", "onResponse: Berhasil");
                                loading.dismiss();
                                try {
                                    JSONObject jsonRESULTS = new JSONObject(response.body().string());
                                    if (jsonRESULTS.getString("error").equals("false")){
                                        Toast.makeText(mContext, "Anda Berhasil Registrasi", Toast.LENGTH_SHORT).show();
                                        startActivity(new Intent(mContext, LoginActivity.class));
                                    } else {
                                        String error_message = jsonRESULTS.getString("error_msg");
                                        Toast.makeText(mContext, error_message, Toast.LENGTH_SHORT).show();
                                    }
                                } catch (JSONException e) {
                                    e.printStackTrace();
                                } catch (IOException e) {
                                    e.printStackTrace();
                                }
                            } else {
                                Log.i("debug", "onResponse: Tidak Berhasil");
                                loading.dismiss();
                            }
                        }

                        @Override
                        public void onFailure(Call<ResponseBody> call, Throwable t) {
                            Log.e("debug", "onFailure: ERROR > " + t.getMessage());
                            Toast.makeText(mContext, "Koneksi Internet Bermasalah", Toast.LENGTH_SHORT).show();
                        }
                    });'

Buka Activity MainActivity.java . Activity ini nanti nya akan mucul setelah nantu kita berhasil login.

Keenambelas

Buka layout activity_main.xml lalu tambahkan komponen-komponen di bawah ini

'<TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="49dp"
        android:text="Main Activity"
        android:textSize="35sp"
        tools:layout_editor_absoluteX="163dp"
        tools:layout_editor_absoluteY="52dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Main Activity"
        android:textSize="25sp"
        tools:layout_editor_absoluteX="163dp"
        tools:layout_editor_absoluteY="52dp"
        android:layout_gravity="center"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:id="@+id/textView3" />


    <TextView
        android:id="@+id/txtResultNama"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="Text Result Nama"
        android:textSize="15sp"
        android:layout_below="@+id/textView3"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="35dp" />'

Ketujuhbelas

Buka Activity MainActivity.java lalu tambahkan kode seperti di bawah ini

TextView txtResultNama;String resultNama;

Lalu tambahkan code di dalam methode onCreate();

' initComponents();

        // untuk mendapatkan data dari activity sebelumnya, yaitu activity login.
        Bundle extras = getIntent().getExtras();
        if (extras != null)
            resultNama = extras.getString("result_nama");
            txtResultNama.setText(resultNama);
    }

    private void initComponents() {
        txtResultNama = (TextView) findViewById(R.id.txtResultNama);
    }'

Kedelapabelas

Jangan lupa untuk mengganti mengubah inten filter ke dalam activity Register. Supaya ketika aplikasi di jalankan, yang akan muncul pertama adalah Activity Register. Buka AndroidManifests.xml lalu pindahkan inten filter ke dalam activity Register, yang sebelumnya inten filter ini berada di dalam Activity MainActivity

'<activity android:name=".View.DaftarActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".View.LoginActivity"></activity>'

Kesembilanbelas

Langkah terakir adalah menjalankan aplikasinya. Berikut adalah screen aplikasi yang sudah berhasil register dan juga login

Screen DaftarActivity



Akan Muncul Toast ketika sudah berhasil Register


Screen LoginActivity


Akan Muncul Toast dan membawa nama ketika sudah berhasil Login

Berikut ini adalah Demo Aplikasinya

 

Ok Temen-temen, gimana tutorial kali ini. Mungkin cukup sekian tutorial dari saya. Apabila ada kesalahan dari saya itu datang nya dari syaitan dan kebenaran itu datang nya dari Allah. Semoga tutorial ini bermanfaat bagi kita semua. Bila ada yang ingin di tanyakan ke saya bisa DM saya via FB, Instagram, Google Hangout dan WA : 081322579702

Wassalamualaikum Warahmatullah

Wednesday, October 11, 2017

[Tutorial] Membuat API Login dan Register Dengan PHP MySQL

October 11, 2017 6 Comments
Assalamualaikum Warahmatullah..  Halo temen-temen.. Balik lagi bersama saya Ramadhany si programmer ganteng... Nah, kali ini saya akan membagi tutorial tentang Bagaimana Caranya untuk membuat API Login dan Register Dengan menggunakan PHP.. Apa itu API ? API adalah singkatan dari Application Programming Interface, Apa kegunaan API ini?  Kegunaannya API ini jika dalam kasus develop aplikasi android adalah sebagai penghubung antara android dan server. API ini berada di tengah-tengah antara android dan server,  Yang dimana android mengirim ke API lalu API akan meneruskan ke server.  Jadi kurang lebih seperti itu pemahaman mengenai API yang saya tau. Mau tau gimana cara membuatnya.. Yuk kita ikuti langkah-langkah nya....





Pertama

Jika kalian belum mempunyai Aplikasi XAMPP, Bisa di download terlebih dahulu. Langsung di buka saja link di bawah ini...


Jika kalian belum tau caranya untuk menginstall XAMPP.. Bisa kunjungi artikel di bawah ini


Kedua

Pastikan XAMPP Anda sudah di aktifkan..


Ketiga

Buatlah databases sesuai dengan keinginan kalian... Untuk contoh, saya beri nama databases dengan db_latihan1...

Keempat

Tambahkan table di databases db_latihan1.. Sebagai contoh, saya disini menambahkan table dengan nama Tb_User

'create table tb_user(
   id int(11) primary key auto_increment,
   unique_id varchar(23) not null unique,
   nama varchar(50) not null,
   email varchar(100) not null unique,
   encrypted_password varchar(80) not null,
   salt varchar(10) not null
);'

Berikut ini adalah tampilan tb_user yang sudah 


Kelima

Buatlah folder di dalam folder htdocs.. Sebagai contoh, saya membuat folder dengan nama latihan1. Lalu setelah itu buat lah folder include di dalam folder latihan1

htdocs -> latihan1 -> include

Keenam

Di dalam folder include buatlah file php dengan nama Config.php. Kelas ini berisi variable-variable Server kita..

'<?php
define("DB_HOST", "localhost");
define("DB_USER", "root");
define("DB_PASSWORD", ""); // jika kalian menggunakan password.. masukan password nya
define("DB_DATABASE", "db_latihan1");
?>'

Ketujuh

Di dalam folder include buatlah file dengan nama DB_Connect.php .  Kelas ini berfungsi untuk menghubungkan kita ke server...

'<?php
class DB_Connect {
    private $conn;
    // koneksi ke database
    public function connect() {
        require_once 'include/Config.php';
         
        // koneksi ke mysql database
        $this->conn = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
         
        // return database handler
        return $this->conn;
    }
}
?>'

Kedelapan

Di Dalam folder include buatlah file DB_Function.php . Kelas ini berfungsi untuk menyimpan suatu fungsi yang didalam fungsi tersebut akan mengirim data ke server.

'<?php
class DB_Functions {
    private $conn;
    // constructor
    function __construct() {
        require_once 'DB_Connect.php';
        // koneksi ke database
        $db = new Db_Connect();
        $this->conn = $db->connect();
    }
    // destructor
    function __destruct() {
         
    }
    public function simpanUser($nama, $email, $password) {
        $uuid = uniqid('', true);
        $hash = $this->hashSSHA($password);
        $encrypted_password = $hash["encrypted"]; // encrypted password
        $salt = $hash["salt"]; // salt
        $stmt = $this->conn->prepare("INSERT INTO tbl_user(unique_id, nama, email, encrypted_password, salt) VALUES(?, ?, ?, ?, ?)");
        $stmt->bind_param("sssss", $uuid, $nama, $email, $encrypted_password, $salt);
        $result = $stmt->execute();
        $stmt->close();
        // cek jika sudah sukses
        if ($result) {
            $stmt = $this->conn->prepare("SELECT * FROM tbl_user WHERE email = ?");
            $stmt->bind_param("s", $email);
            $stmt->execute();
            $user = $stmt->get_result()->fetch_assoc();
            $stmt->close();
            return $user;
        } else {
            return false;
        }
    }
    /**
     * Get user berdasarkan email dan password
     */
    public function getUserByEmailAndPassword($email, $password) {
        $stmt = $this->conn->prepare("SELECT * FROM tbl_user WHERE email = ?");
        $stmt->bind_param("s", $email);
        if ($stmt->execute()) {
            $user = $stmt->get_result()->fetch_assoc();
            $stmt->close();
            // verifikasi password user
            $salt = $user['salt'];
            $encrypted_password = $user['encrypted_password'];
            $hash = $this->checkhashSSHA($salt, $password);
            // cek password jika sesuai
            if ($encrypted_password == $hash) {
                // autentikasi user berhasil
                return $user;
            }
        } else {
            return NULL;
        }
    }
    /**
     * Cek User ada atau tidak
     */
    public function isUserExisted($email) {
        $stmt = $this->conn->prepare("SELECT email from tbl_user WHERE email = ?");
        $stmt->bind_param("s", $email);
        $stmt->execute();
        $stmt->store_result();
        if ($stmt->num_rows > 0) {
            // user telah ada 
            $stmt->close();
            return true;
        } else {
            // user belum ada 
            $stmt->close();
            return false;
        }
    }
    /**
     * Encrypting password
     * @param password
     * returns salt and encrypted password
     */
    public function hashSSHA($password) {
        $salt = sha1(rand());
        $salt = substr($salt, 0, 10);
        $encrypted = base64_encode(sha1($password . $salt, true) . $salt);
        $hash = array("salt" => $salt, "encrypted" => $encrypted);
        return $hash;
    }
    /**
     * Decrypting password
     * @param salt, password
     * returns hash string
     */
    public function checkhashSSHA($salt, $password) {
        $hash = base64_encode(sha1($password . $salt, true) . $salt);
        return $hash;
    }
}
?>'

Kesembilan

Di dalam folder latihan1 buatlah file Login.php . Kelas ini berfungsi untuk login dengan parameternya email dan password.

'<?php
require_once 'include/DB_Functions.php';
$db = new DB_Functions();
// json response array
$response = array("error" => FALSE);
if (isset($_POST['email']) && isset($_POST['password'])) {
    // menerima parameter POST ( email dan password )
    $email = $_POST['email'];
    $password = $_POST['password'];
    // get the user by email and password
    // get user berdasarkan email dan password
    $user = $db->getUserByEmailAndPassword($email, $password);
    if ($user != false) {
        // user ditemukan
        $response["error"] = FALSE;
        $response["uid"] = $user["unique_id"];
        $response["user"]["nama"] = $user["nama"];
        $response["user"]["email"] = $user["email"];
        echo json_encode($response);
    } else {
        // user tidak ditemukan password/email salah
        $response["error"] = TRUE;
        $response["error_msg"] = "Login gagal. Password/Email salah";
        echo json_encode($response);
    }
} else {
    $response["error"] = TRUE;
    $response["error_msg"] = "Parameter (email atau password) ada yang kurang";
    echo json_encode($response);
}
?>'

Kesepuluh

Buatlah file php di dalam folder latihan1 dengan nama register.php . Kelas ini berfungsi untuk menerima data dari Android yang lalu diteruskan menyimpan data ke server.

'<?php
require_once 'include/DB_Function.php';
$db = new DB_Functions();
// json response array
$response = array("error" => FALSE);
if (isset($_POST['nama']) && isset($_POST['email']) && isset($_POST['password'])) {
    // menerima parameter POST ( nama, email, password )
    $nama = $_POST['nama'];
    $email = $_POST['email'];
    $password = $_POST['password'];
    // Cek jika user ada dengan email yang sama
    if ($db->isUserExisted($email)) {
        // user telah ada
        $response["error"] = TRUE;
        $response["error_msg"] = "User telah ada dengan email " . $email;
        echo json_encode($response);
    } else {
        // buat user baru
        $user = $db->simpanUser($nama, $email, $password);
        if ($user) {
            // simpan user berhasil
            $response["error"] = FALSE;
            $response["uid"] = $user["unique_id"];
            $response["user"]["nama"] = $user["nama"];
            $response["user"]["email"] = $user["email"];
            echo json_encode($response);
        } else {
            // gagal menyimpan user
            $response["error"] = TRUE;
            $response["error_msg"] = "Terjadi kesalahan saat melakukan registrasi";
            echo json_encode($response);
        }
    }
} else {
    $response["error"] = TRUE;
    $response["error_msg"] = "Parameter (nama, email, atau password) ada yang kurang";
    echo json_encode($response);
}
?>'

Kesebelas

Langkah terakhir, coba test terlebih dahulu API Login dan Register tersebut di Aplikasi Postman dengan menggunakan method POST. Apabila kalian belum mempunyai aplikasi Postman, Kalian bisa download di Link berikut 


API Login       : http://localhost/latihan1/login.php

API Register  : http://localhost/latihan1/register.php


Response API Login :

{"error":false,"uid":"59de4ad3595037.83612840","user":{"nama":"rama","email":"rama@gmail.com"}}

Kalo misalkan telah muncul API seperti di atas.. Maka Login Telah Berhasil

Response API Register : 

{"error":false,"uid":"59de4ad3595037.83612840","user":{"nama":"rama","email":"rama@gmail.com"}}

Kalo Misalkan telah muncul API Seperti di atas.. Maka Register Telah Berhasil


Sekian tutorial kali ini, semoga bisa bermanfaat bagi kita semua, apabila ada kesalahan dan kekurangan tolong di maafkan, karena kesalahan itu datang nya dari syaitan dan kebenaran itu datang nya dari Allah. 
Apabila ada yang ingin di tanyakan, bisa langsung DB saya via FB, Instagram, Google Hangout dan WA

Wassalamualaikum Warahmatullah