Sunday, July 21, 2019

Tutorial Membuat Aplikasi Informasi Al-Quran dengan Fast Android Networking

Tutorial Membuat Aplikasi Informasi Al-Quran dengan Fast Android Networking

Tutorial Membuat Aplikasi Informasi Al-Quran dengan Fast Android Networking
 Aplikasi Informasi Al-Quran
السَّلاَمُ عَلَيْكُمْ وَرَحْمَةُ اللهِ وَبَرَكَاتُه sobat 48😁 kali ini saya akan membagikan tutorial Android Studio lagi nih, untuk kali ini saya akan buat Tutorial Membuat Aplikasi Informasi Al-Quran dengan Fast Android Networking menggunakan Android Studio. Apa itu Fast Android Networking? Fast Android Networking atau FAN adalah sebuah library yang dapat memudahkan kita untuk melakukan HttpConnectionRequest. Untuk lebih lengkapnya kalian bisa lihat DISINI.

Aplikasi Informasi Al-Quran ini datanya saya ambil dari API https://api.banghasan.com/quran/format/json/surat. Datanya berisikan informasi tentang surat-surat didalam Al-Quran. Di mulai dari nomor urut, nama surat, jumlah ayat, arti surat, tempat di turunkan dan keterangan dari surat tersebut.
Tutorial Membuat Aplikasi Informasi Al-Quran dengan Fast Android Networking
 Aplikasi Informasi Al-Quran
Aplikasi ini saya buat dengan bahasa pemrograman Kotlin. Jadi, untuk library di gradle-nya sedikit berbeda ya. Karena saya sendiri sedang belajar Kotlin, dan itu agak membingungkan karena saya belum terbiasa. Maka dari itu aplikasi in saya buat dengan tujuan kita samasama untuk belajar. Jika ingin kalian convert ke dalam Java silahkan saja, source code saya sediakan paragraf berikutnya.

Kalau kalian ingin SOURCE CODE Aplikasi Informasi Al-Quran ini, silahkan download di Github saya DISINI. Tetapi jika kalian ingin tahu cara mengaplikasikannya, silahkan lanjut baca artikel ini sampai selesai😄

Jika kalian ingin mencoba membuat aplikasi ini dengan tutorial versi video, berikut saya berikan Videonya:

Jangan lupa subscribe Channel Youtube saya juga ya Azhar Rivaldi, karena disana ada banyak tutorial-tutorial untuk membuat aplikasi lainnya. Oke langsung saja tanpa basa-basi lagi kita langsung ke langkah pertama :

1. Buat project baru di Android Studio dengan cara klik File ⇒ Project Baru. Ketika diminta untuk memilih Default Activity, pilih Empty Activity dan klik next. Untuk minSDK, disini saya set API 16 ya.

2. Ubah build.gradle menjadi seperti ini :


dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support:design:28.0.0'
    implementation 'com.android.support:recyclerview-v7:28.0.0'
    implementation 'com.android.support:cardview-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

    //FAN
    implementation 'com.amitshekhar.android:android-networking:1.0.2'
    implementation 'com.amitshekhar.android:jackson-android-networking:1.0.2'

3. Untuk coding xml-nya, kalian bisa lihat dibawah ini :

activity_detail.xml
Sebagai tampilan dari menu informasi Al-Quran yang terdiri dari nomor urut, nama surat, jumlah ayat, arti surat, tempat di turunkan dan keterangan. Coding-nya DISINI.

activity_main.xml
Sebagai tampilan dari menu utama yang berisikan daftar surat Al-Quran. Coding-nya DISINI.

activity_splash_screen.xml
Sebagai tampilan dari menu saat awal masuk aplikasi. Coding-nya DISINI.

layout_list_surat.xml
Sebagai layout yang menampilkan daftar surat ke activity_main.xml. Coding-nya DISINI.

4. Untuk coding Kotlin-nya, kalian bisa lihat dibawah ini :

DetailActivity.kt
Sebagai class yang menampilkan detail informasi yang didapat dari API. Coding-nya DISINI.

MainActivity.kt
Sebagai class yang menampilkan daftar surat di menu utama. Coding-nya DISINI.

MainPresenter.kt
Sebagai class yang berfungsi untuk mengambil data dari API. Coding-nya DISINI.

MainView.kt
Class ini berfungsi untuk merespon aktivitas yang ada di MainActivity. Coding-nya DISINI.

SplashScreenActivity.kt
Class ini berfungsi untuk menampilkan menu awal saat masuk ke dalam aplikasi. Coding-nya DISINI.

AdapterSurat.kt
Sebagai class yang berfungsi sebagai Adapter untuk menampilkan daftar surat ke dalam MainActivity. Coding-nya DISINI.

Response.kt
Sebagai class yang berfungsi untuk mendapatkan respon dari API untuk menampilkan data. Coding-nya DISINI.

Surat.kt
Sebagai class yang berfungsi untuk mengambil item dari API. Coding-nya DISINI.

5. Jika semua sudah selesai, kalian Run. Jika kalian mengikuti langkah-langkah diatas dengan baik, pasti aplikasi yang kalian buat akan berjalan sebagaimana mestinya. Namun jika mengalami Error, silahkan berikan komentar dan kita diskusikan bersama.

Demikian informasi yang saya bagikan untuk kalian. Jangan lupa bagikan artikel ini ke teman-teman kalian agar ikut membaca Tutorial Membuat Aplikasi Informasi Al-Quran dengan Fast Android Networking ini. Subscribe juga blog Rivaldi 48 ini agar kalian mendapatkan notifikasi saat Admin update artikel terbaru. Semoga kalian lebih nyaman dan mudah dalam mengakses Blog Rivaldi 48 dimanapun kalian berada. Terima Kasih. Follow Instagram Admin @azhardvls_

Sunday, July 14, 2019

Coba Live Wallpaper Phone Electricity, Keren Banget!

Coba Live Wallpaper Phone Electricity, Keren Banget!

Coba Live Wallpaper Phone Electricity, Keren Banget!
Live Wallpaper Phone Electricity
Halo sobat 48😁 kali ini saya akan membagikan sebuah aplikasi Live Wallpaper yang bernama Live Wallpaper Phone Electricity. Awalnya saya lihat ada seorang member di grup komunitas Redmi Note 4, ia menanyakan apa nama wallpaper tersebut. Karena wallpaper tersebut seperti bagian dalam smartphone tanpa casing tetapi ada animasinya. Saya pun tertarik untuk mencobanya dan mencari nama APK tersebut di kolom komentar😂

Ya, benar saja ada yang menjawab nama APK / aplikasi tersebut adalah Live Wallpaper Phone Electricity. Tentunya saya langsung cari di Play Store dan review-nya pun bagus. Setelah saya instal dan saya coba, memang hasilnya sangat keren! Tetapi ada sedikit saran sebelum kalian Set Wallpaper dengan Live Wallpaper Phone Electricity ini.

Usahakan saat ingin Set Wallpaper dengan APK ini, matikan dahulu koneksi internet kalian. Agar iklan tidak mengganggu. Oh ya, aplikasi ini berjalan di latar belakang. Jadi wajar ya kalau baterai smartphone kalian nantinya agak sedikit terkuras.

Jika kalian ingin melihat review dan tutorial versi video aplikasi ini, berikut saya berikan Videonya:

Jangan lupa subscribe Channel Youtube saya juga ya Azhar Rivaldi, karena disana ada banyak tutorial-tutorial untuk membuat lainnya. Oke langsung saja saya berikan langkah-langkah untuk instal dan cara setting-nya :

1. Pertama, kalian unduh APK Live Wallpaper Phone Electricity (size 100MB) melalui Play Store DISINI. Tetapi jika smartphone kamu tidak bisa mengunduh APK tersebut dari Play Store, unduh melalui Google Drive DISINI.

2. Matikan koneksi internet. Setelah itu kalian instal. Buka Phone Electricity, lalu klik Choose App Video.
Coba Live Wallpaper Phone Electricity, Keren Banget!
Live Wallpaper Phone Electricity
3. Kemudian, kalian tentukan tema yang menurut kalian bagus. Selain wallpaper listrik, kalian juga bisa mengunduh tema lainnya pada menu utama aplikasi.
Coba Live Wallpaper Phone Electricity, Keren Banget!
Live Wallpaper Phone Electricity
4. Set Wallpaper dan lihat hasilnya.
Coba Live Wallpaper Phone Electricity, Keren Banget!
Live Wallpaper Phone Electricity
Demikian informasi yang saya bagikan untuk kalian. Jangan lupa bagikan artikel ini ke teman-teman kalian agar ikut mengunduh Live Wallpaper Phone Electricity ini. Subscribe juga blog Rivaldi 48 ini agar kalian mendapatkan notifikasi saat Admin update artikel terbaru. Semoga kalian lebih nyaman dan mudah dalam mengakses Blog Rivaldi 48 dimanapun kalian berada. Terima Kasih. Follow Instagram Admin @azhardvls_

Wednesday, July 10, 2019

Tutorial Membuat Aplikasi Kuis Pilihan Ganda Menggunakan Database SQLite dengan Android Studio

Tutorial Membuat Aplikasi Kuis Pilihan Ganda Menggunakan Database SQLite dengan Android Studio

Tutorial Membuat Aplikasi Kuis Pilihan Ganda Menggunakan Database SQLite dengan Android Studio
Aplikasi Kuis Pilihan Ganda
Halo sobat 48😁 banyak sekali dari kalian yang meminta saya untuk membuatkan aplikasi kuis pilihan ganda menggunakan database SQLite. Padahal kalau kalian cari di Google sudah banyak kok yang membagikannya. Tapi.. tidak apa-apa, ini saya bagikan untuk memenuhi permintaan kalian dan sekaligus melatih kemampuan programming saya juga. Bagaimanapun juga, saya masih tetap dan harus belajar melatih kemampuan saya sendiri dalam membuat program.

Oh ya, Tutorial Membuat Aplikasi Kuis Pilihan Ganda Menggunakan Database SQLite dengan Android Studio ini contoh soalnya sebagian saya ambil dari Ruang Guru. Jadi jika kalian ingin penjelasan mengenai jawaban-jawaban dari soal yang saya sediakan, silahkan kalian ke Ruang Guru ya.

Kalau kalian ingin SOURCE CODE Aplikasi Kuis Pilihan Ganda Menggunakan Database SQLite ini, silahkan download di Github saya DISINI. Tetapi jika kalian ingin tahu cara mengaplikasikannya, silahkan lanjut baca artikel ini sampai selesai😄

Jika kalian ingin mencoba membuat aplikasi ini dengan tutorial versi video, berikut saya berikan Videonya:

Jangan lupa subscribe Channel Youtube saya juga ya Azhar Rivaldi, karena disana ada banyak tutorial-tutorial untuk membuat aplikasi lainnya. Oke langsung saja tanpa basa-basi lagi kita langsung ke langkah pertama :

1. Buat project baru di Android Studio dengan cara klik File ⇒ Project Baru. Ketika diminta untuk memilih Default Activity, pilih Empty Activity dan klik next. Untuk minSDK, disini saya set API 21 ya.

2. Untuk coding xml-nya, kalian bisa lihat dibawah ini :

activity_dashboard.xml
Sebagai tampilan dari menu utama. Coding-nya DISINI.

activity_question.xml
Sebagai tampilan dari menu soal-soal. Coding-nya DISINI.
Tutorial Membuat Aplikasi Kuis Pilihan Ganda Menggunakan Database SQLite dengan Android Studio
Aplikasi Kuis Pilihan Ganda
grid_view_item.xml
Sebagai isi GridView dari activity_dashboard.xml yang menampilkan kategori soal. Coding-nya DISINI.

question_card_layout.xml
Sebagai isi dari activity_question.xml yang menampilkan soal-soal beserta jawaban pilihan ganda. Coding-nya DISINI.
Tutorial Membuat Aplikasi Kuis Pilihan Ganda Menggunakan Database SQLite dengan Android Studio
Aplikasi Kuis Pilihan Ganda
3. Untuk coding Java-nya, kalian bisa lihat dibawah ini :

CategoryAdapter.java
Sebagai class yang menyediakan kategori soal-soal. Coding-nya DISINI.

CategoryItem.java
Sebagai class yang menseleksi warna dan kategori pada GridView. Coding-nya DISINI.

DashboardActivity.java
Sebagai class yang berfungsi menampilkan kategori ke activity_dashborad.xml. Coding-nya DISINI.

Constant.java
Class ini hanya opsional saja, karena hanya berisi action share dari Floating Action Button. Coding-nya DISINI.

Question.java
Sebagai class yang berfungsi menseleksi tampilan soal dan jawaban. Coding-nya DISINI.

QuestionActivity.java
Sebagai class yang menampilkan soal-soal, jawaban dan nilainya. Coding-nya DISINI.

QuestionAdapter.java
Sebagai class yang menseleksi jawaban salah dan benar. Coding-nya DISINI.

QuizContract.java
Sebagai class yang berfungsi untuk membuat kolom tabel. Coding-nya DISINI.

QuizDBHelper.java
Sebagai class yang berisi soal-soal dan jawaban. Jika kalian ingin menambahkan soal-soal, disinilah letaknya. Coding-nya DISINI.

ToggleButtonGroupTableLayout.java
Sebagai class yang menseleksi warna jawaban yang benar dan jawaban yang salah. Jika jawaban benar, maka akan berwarna hijau. Jika jawaban salah, maka akan berwarna merah. Coding-nya DISINI.

4. Jika semua sudah selesai, kalian Run. Jika kalian mengikuti langkah-langkah diatas dengan baik, pasti aplikasi yang kalian buat akan berjalan sebagaimana mestinya. Namun jika mengalami Error, silahkan berikan komentar dan kita diskusikan bersama.

Demikian informasi yang saya bagikan untuk kalian. Jangan lupa bagikan artikel ini ke teman-teman kalian agar ikut membaca Tutorial Membuat Aplikasi Kuis Pilihan Ganda Menggunakan Database SQLite dengan Android Studio ini. Subscribe juga blog Rivaldi 48 ini agar kalian mendapatkan notifikasi saat Admin update artikel terbaru. Semoga kalian lebih nyaman dan mudah dalam mengakses Blog Rivaldi 48 dimanapun kalian berada. Terima Kasih. Follow Instagram Admin @azhardvls_

Wednesday, July 3, 2019

Beginilah Cara Cek Tingkat Radiasi Semua Merk Smartphone

Beginilah Cara Cek Tingkat Radiasi Semua Merk Smartphone

Beginilah Cara Cek Tingkat Radiasi Semua Merk Smartphone
Tingkat Radiasi Smartphone
Halo sobat 48😁 kali ini saya akan membagikan sebuah artikel yang membahas Cara Cek Tingkat Radiasi Semua Merk Smartphone. Beberapa waktu yang lalu di grup Komunitas Android Indonesia sedang ramai membahas hal ini. Awalnya ada salah satu member yang dipostingannya mengaku menggunakan smartphone Xiaomi dengan tipe Mi A1. Ia membagikan sebuah screenshot jumlah nilai radiasi pada smartphone miliknya. Menurut member yang lain yang mengomentari postingannya, Xiaomi dengan tipe ini memang memiliki tingkat radiasi yang cukup tinggi, dan digadang-gadang dapat menimbulkan kanker otak loh!

Menurut artikel yang saya baca, sebagian hasil penelitian mengungkapkan bahwa ponsel memancarkan radiasi karena gelombang radio yang mampu merusak DNA. Tetapi, hingga kini belum ada bukti spesifik yang mampu membuktikan bahwa paparan radiasi smartphone bisa menyebabkan kanker. Kalian bisa menghitung jumlah nilai SAR (Specific Absorption Rate) untuk mengetahui tingkat radiasi smartphone. Nilai SAR adalah nilai dimana tingkat radiasi atau gelombang elektromagnetik yang ada pada smartphone. Smartphone terdiri dari pemancar dan penerima radio agar mampu beroperasi pada jaringan nirkabel.

Federal Communications Commision (FCC) di Amerika Serikat menetapkan tingkat standar SAR adalah 1.6 W/Kg untuk smartphone. Berarti smartphone yang memiliki tingkat radiasi di bawah 1.6 W/Kg dianggap tidak mengancam dan membahayakan. Sebenarnya, kalian bisa melihat dibalik kemasan smartphone untuk mengetahui tingkat radiasi SAR smartphone kalian. Selain itu, kalian juga bisa menggunakan cara lain untuk memeriksa tingkat SAR dengan memeriksanya di situs produsen smartphone yang kalian gunakan.

Pada umumnya, kalian bisa menggunakan cara praktis seperti ini, tekan dial *#07# di smartphone. Maka nanti informasi mengenai SAR smartphone kalian akan muncul, dan itulah nilai SAR yang ditetapkan dari pabrik smartphone kalian. Semakin rendah nilai SAR smartphone, maka semakin baik smartphone tersebut. Untuk saat ini, kebanyakan smartphone memiliki nilai SAR dalam tingkat yang rendah yaitu berkisar antara 0.5 sampai 0.6. Selain itu, kalian bisa menghindari paparan radiasi dengan menggunakan earphone atau headset saat melakukan panggilan dan membatasi penggunaan perangkat mobile.

Lalu bagaimana jika smartphone kalian tidak bisa menggunakan dial *#07# ? Nah, disini saya akan memberi tahu bagaimana cara cek tingkat radiasi smartphone kalian jika tidak bisa melalui dial *#07#.

1. Sony
Untuk smartphone dengan merk Sony, kalian bisa cek DISINI.

2. Samsung
Untuk smartphone dengan merk Samsung, kalian bisa cek DISINI.

3. Xiaomi
Untuk smartphone dengan merk Xiaomi, kalian bisa cek DISINI.

4. Apple
Untuk smartphone dengan merk Apple, kalian bisa cek DISINI.

5. LG
Untuk smartphone dengan merk LG, kalian bisa cek DISINI.

6. Huawei
Untuk smartphone dengan merk Huawei, kalian bisa cek DISINI.

7. Nokia
Untuk smartphone dengan merk Nokia, kalian bisa cek DISINI.

Oke sepertinya cuma itu yang saya tahu, jika kalian ingin menambahkan lagi silahkan berikan di komentar ya. Agar nanti saya sunting artikel ini dengan menambahkan link yang kalian tahu😁

Demikian informasi yang saya bagikan untuk kalian. Jangan lupa bagikan artikel ini ke teman-teman kalian agar ikut membaca Beginilah Cara Cek Tingkat Radiasi Semua Merk Smartphone. Subscribe juga blog Rivaldi 48 ini agar kalian mendapatkan notifikasi saat saya update artikel terbaru. Semoga kalian lebih nyaman dan mudah dalam mengakses Blog Rivaldi 48 dimanapun kalian berada. Terima Kasih. Follow Instagram saya @azhardvls_

Tuesday, July 2, 2019

Membuat Aplikasi Android CRUD Menggunakan Database MySQL dengan Library Volley

Membuat Aplikasi Android CRUD Menggunakan Database MySQL dengan Library Volley

Membuat Aplikasi Android CRUD Menggunakan Database MySQL dengan Library Volley
Aplikasi Android CRUD
Halo sobat 48😁 bagaimana kabarnya? Semoga selalu dalam keadaan sehat ya. Kali ini saya akan membagikan sebuah tutorial tentang bagaimana cara Membuat Aplikasi Android CRUD Menggunakan Database MySQL dengan Library Volley. Aplikasi CRUD disini berupa data Kontak yang saya buat dengan sederhana, karena ini hanya untuk sampel saja. Jadi, silahkan kalian kebangkan lagi ya sobat. Kalian cukup menambahkan saja field dari databasenya, saya harap kalian sudah paham untuk masalah ini😄

Buat kalian yang belum tahu MySQL, MySQL adalah sebuah perangkat lunak sistem manajemen basis data SQL, atau DBMS yang multithread dan multi-user. MySQL adalah Relational Database Management System (RDBMS) yang berada dibawah lisensi GPL (General Public License). MySQL, sebenarnya merupakan turunan dari SQL. SQL (Structured Query Language) adalah sebuah konsep pengoperasian database, terutama untuk pemilihan atau seleksi dan pemasukan data, yang memungkinkan pengoperasian data dikerjakan dengan mudah secara otomatis.

CRUD (Create Read Update Delete) adalah sebuah sebutan untuk aplikasi dimana pengguna dapat menambah, mengedit dan menghapus data. Aplikasi CRUD Kontak ini menggunakan FAB (Floating Action Button) untuk mengisi datanya dalam bentuk Form. Semua data akan ditampilkan pada ListView. Untuk mengedit atau menghapus datanya, pengguna cukup tekan yang lama pada data yang ingin diubah atau dihapus. Sampai disini kalian sudah paham kan?😁

Oke tanpa basa-basi lagi langsung saja pertama membuat database dengan nama biodata dengan nama tabel kontak dan struktur tabelnya seperti berikut :
Field Type Lenght Primary Key Auto Increment
ID int 10
Nama varchar 50 - -
Tlp varchar 12 - -
Email varchar 50 - -
Maka nanti jika ingin menampilkan struktur datanya menggunakan CMD akan seperti ini:
Membuat Aplikasi Android CRUD Menggunakan Database MySQL dengan Library Volley
Struktur Database CRUD
Jika sudah, selanjutnya kita akan membuat sebuah Web Service untuk parsing data dari MySQL ke Android. Web Service itu terdiri dari koneksi.php, select.php, delete.php, edit.php, update.php dan insert.php. File php tersebut kalian taruh di folder biodata. Jadi, di dalam folder xampp/htdocs kalian buat folder android, lalu di dalam folder android buat folder biodata. Jika kalian bingung, copas saja dengan SOURCE CODE yang sudah saya buat DISINI.
Letak Web Service
Untuk kodingnya kalian bisa lihat dibawah ini :
koneksi.php
Sebagai koneksi aplikasi ke database. Coding-nya DISINI.

select.php
Sebagai koneksi aplikasi ke database. Coding-nya DISINI.

delete.php
Sebagai koneksi aplikasi ke database. Coding-nya DISINI.

edit.php
Sebagai koneksi aplikasi ke database. Coding-nya DISINI.

update.php
Sebagai koneksi aplikasi ke database. Coding-nya DISINI.

insert.php
Sebagai koneksi aplikasi ke database. Coding-nya DISINI.

1. Buat project baru di Android Studio dengan cara klik File ⇒ Project Baru. Ketika diminta untuk memilih Default Activity, pilih Empty Activity dan klik next. Untuk minSDK, disini saya set API 21 ya.
2. Untuk memanggil Web Service tadi, tambahkan library Volley di build.gradle :


dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

    implementation 'com.android.support:design:28.0.0'
    implementation 'com.mcxiaoke.volley:library:1.0.19'
}

3. Karena menggunakan koneksi internet, ubah Android Manifest.xml :


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.azhar.crud">

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

    <application
        android:name=".app.AppController"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

3. Buat MainActivity.java. Class ini berfungsi menampilkan data dalam ListView dari Web Service Volley JsonArrayRequest. Setelah diparsing, semua data JSON Array akan disimpan pada objek Data.java. Terakhir memanggil notifyDataSetChanged() untuk perubahan data pada Adapter. Fungsi insert, update, delete, select, dan menampilkan form kontak juga ada didalam class ini.


package com.azhar.crud;


import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.VolleyLog;
import com.android.volley.toolbox.JsonArrayRequest;
import com.android.volley.toolbox.StringRequest;
import com.azhar.crud.adapter.KontakAdapter;
import com.azhar.crud.app.AppController;
import com.azhar.crud.data.Data;
import com.azhar.crud.util.Server;

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

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by Azhar Rivaldi on 27/06/2019.
 */

public class MainActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener {

    Toolbar toolbar;
    FloatingActionButton fab;
    ListView list;
    SwipeRefreshLayout swipe;
    List itemList = new ArrayList();
    KontakAdapter adapter;
    int success;
    AlertDialog.Builder dialog;
    LayoutInflater inflater;
    View dialogView;
    EditText txt_id, txt_nama, txt_tlp, txt_email;
    String id, nama, tlp, email;

    private static final String TAG = MainActivity.class.getSimpleName();

    private static String url_select = Server.URL + "select.php";
    private static String url_insert = Server.URL + "insert.php";
    private static String url_edit   = Server.URL + "edit.php";
    private static String url_update = Server.URL + "update.php";
    private static String url_delete = Server.URL + "delete.php";

    public static final String TAG_ID = "id";
    public static final String TAG_NAMA = "nama";
    public static final String TAG_TLP = "tlp";
    public static final String TAG_EMAIL = "email";
    private static final String TAG_SUCCESS = "success";
    private static final String TAG_MESSAGE = "message";

    String tag_json_obj = "json_obj_req";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        // menghubungkan variablel pada layout dan pada java
        fab = (FloatingActionButton) findViewById(R.id.fab_add);
        swipe = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh_layout);
        list = (ListView) findViewById(R.id.list);

        // untuk mengisi data dari JSON ke dalam adapter
        adapter = new KontakAdapter(MainActivity.this, itemList);
        list.setAdapter(adapter);

        // menamilkan widget refresh
        swipe.setOnRefreshListener(this);

        swipe.post(new Runnable() {
                       @Override
                       public void run() {
                           swipe.setRefreshing(true);
                           itemList.clear();
                           adapter.notifyDataSetChanged();
                           callVolley();
                       }
                   }
        );

        // fungsi floating action button untuk memanggil form kontak
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                DialogForm("", "", "", "", "SIMPAN");
            }
        });

        // listview ditekan lama akan menampilkan dua pilihan edit atau delete data
        list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

            @Override
            public boolean onItemLongClick(final AdapterView parent, View view, final int position, long id) {
                // TODO Auto-generated method stub
                final String idx = itemList.get(position).getId();

                final CharSequence[] dialogitem = {"Edit", "Delete"};
                dialog = new AlertDialog.Builder(MainActivity.this);
                dialog.setCancelable(true);
                dialog.setItems(dialogitem, new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // TODO Auto-generated method stub
                        switch (which) {
                            case 0:
                                edit(idx);
                                break;
                            case 1:
                                delete(idx);
                                break;
                        }
                    }
                }).show();
                return false;
            }
        });

    }

    @Override
    public void onRefresh() {
        itemList.clear();
        adapter.notifyDataSetChanged();
        callVolley();
    }

    // untuk mengosongi edittext pada form
    private void kosong() {
        txt_id.setText(null);
        txt_nama.setText(null);
        txt_tlp.setText(null);
        txt_email.setText(null);
    }

    // untuk menampilkan dialog form kontak
    private void DialogForm(String idx, String namax, String tlpx, String emailx, String button) {
        dialog = new AlertDialog.Builder(MainActivity.this);
        inflater = getLayoutInflater();
        dialogView = inflater.inflate(R.layout.form_kontak, null);
        dialog.setView(dialogView);
        dialog.setCancelable(true);
        dialog.setIcon(R.drawable.ic_contact);
        dialog.setTitle("Kontak");

        txt_id = (EditText) dialogView.findViewById(R.id.txt_id);
        txt_nama = (EditText) dialogView.findViewById(R.id.txt_nama);
        txt_tlp = (EditText) dialogView.findViewById(R.id.txt_tlp);
        txt_email = (EditText) dialogView.findViewById(R.id.txt_email);

        if (!idx.isEmpty()) {
            txt_id.setText(idx);
            txt_nama.setText(namax);
            txt_tlp.setText(tlpx);
            txt_email.setText(emailx);
        } else {
            kosong();
        }

        dialog.setPositiveButton(button, new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                id = txt_id.getText().toString();
                nama = txt_nama.getText().toString();
                tlp = txt_tlp.getText().toString();
                email = txt_email.getText().toString();
                simpan_update();
                dialog.dismiss();
            }
        });

        dialog.setNegativeButton("BATAL", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                kosong();
            }
        });

        dialog.show();
    }

    // untuk menampilkan semua data pada listview
    private void callVolley() {
        itemList.clear();
        adapter.notifyDataSetChanged();
        swipe.setRefreshing(true);

        // membuat request JSON
        JsonArrayRequest jArr = new JsonArrayRequest(url_select, new Response.Listener() {
            @Override
            public void onResponse(JSONArray response) {
                Log.d(TAG, response.toString());

                // Parsing json
                for (int i = 0; i < response.length(); i++) {
                    try {
                        JSONObject obj = response.getJSONObject(i);

                        Data item = new Data();

                        item.setId(obj.getString(TAG_ID));
                        item.setNama(obj.getString(TAG_NAMA));
                        item.setTlp(obj.getString(TAG_TLP));
                        item.setEmail(obj.getString(TAG_EMAIL));

                        // menambah item ke array
                        itemList.add(item);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }

                // notifikasi adanya perubahan data pada adapter
                adapter.notifyDataSetChanged();

                swipe.setRefreshing(false);
            }
        }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d(TAG, "Error: " + error.getMessage());
                swipe.setRefreshing(false);
            }
        });

        // menambah request ke request queue
        AppController.getInstance().addToRequestQueue(jArr);
    }

    // fungsi untuk menyimpan atau update
    private void simpan_update() {
        String url;

        if (id.isEmpty()) {
            url = url_insert;
        } else {
            url = url_update;
        }

        StringRequest strReq = new StringRequest(Request.Method.POST, url, new Response.Listener() {

            @Override
            public void onResponse(String response) {
                Log.d(TAG, "Response: " + response.toString());

                try {
                    JSONObject jObj = new JSONObject(response);
                    success = jObj.getInt(TAG_SUCCESS);

                    // Cek error node pada json
                    if (success == 1) {
                        Log.d("Add/update", jObj.toString());

                        callVolley();
                        kosong();

                        Toast.makeText(MainActivity.this, jObj.getString(TAG_MESSAGE), Toast.LENGTH_LONG).show();
                        adapter.notifyDataSetChanged();

                    } else {
                        Toast.makeText(MainActivity.this, jObj.getString(TAG_MESSAGE), Toast.LENGTH_LONG).show();
                    }
                } catch (JSONException e) {
                    // JSON error
                    e.printStackTrace();
                }

            }
        }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e(TAG, "Error: " + error.getMessage());
                Toast.makeText(MainActivity.this, error.getMessage(), Toast.LENGTH_LONG).show();
            }
        })

        {

            @Override
            protected Map getParams() {
                // Posting parameters ke post url
                Map params = new HashMap();

                if (id.isEmpty()) {
                    params.put("nama", nama);
                    params.put("tlp", tlp);
                    params.put("email", email);
                } else {
                    params.put("id", id);
                    params.put("nama", nama);
                    params.put("tlp", tlp);
                    params.put("email", email);
                }

                return params;
            }

        };

        AppController.getInstance().addToRequestQueue(strReq, tag_json_obj);
    }

    // fungsi untuk get edit data kontak
    private void edit(final String idx) {
        StringRequest strReq = new StringRequest(Request.Method.POST, url_edit, new Response.Listener() {

            @Override
            public void onResponse(String response) {
                Log.d(TAG, "Response: " + response.toString());

                try {
                    JSONObject jObj = new JSONObject(response);
                    success = jObj.getInt(TAG_SUCCESS);

                    // Cek error pada json
                    if (success == 1) {
                        Log.d("get edit data", jObj.toString());
                        String idx = jObj.getString(TAG_ID);
                        String namax = jObj.getString(TAG_NAMA);
                        String tlpx = jObj.getString(TAG_TLP);
                        String emailx = jObj.getString(TAG_EMAIL);

                        DialogForm(idx, namax, tlpx, emailx, "UPDATE");

                        adapter.notifyDataSetChanged();

                    } else {
                        Toast.makeText(MainActivity.this, jObj.getString(TAG_MESSAGE), Toast.LENGTH_LONG).show();
                    }
                } catch (JSONException e) {
                    // JSON error
                    e.printStackTrace();
                }

            }
        }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e(TAG, "Error: " + error.getMessage());
                Toast.makeText(MainActivity.this, error.getMessage(), Toast.LENGTH_LONG).show();
            }
        }) {

            @Override
            protected Map getParams() {
                // Posting parameters ke post url
                Map params = new HashMap();
                params.put("id", idx);

                return params;
            }

        };

        AppController.getInstance().addToRequestQueue(strReq, tag_json_obj);
    }

    // fungsi untuk menghapus
    private void delete(final String idx) {
        StringRequest strReq = new StringRequest(Request.Method.POST, url_delete, new Response.Listener() {

            @Override
            public void onResponse(String response) {
                Log.d(TAG, "Response: " + response.toString());

                try {
                    JSONObject jObj = new JSONObject(response);
                    success = jObj.getInt(TAG_SUCCESS);

                    // Cek error pada json
                    if (success == 1) {
                        Log.d("delete", jObj.toString());

                        callVolley();

                        Toast.makeText(MainActivity.this, jObj.getString(TAG_MESSAGE), Toast.LENGTH_LONG).show();

                        adapter.notifyDataSetChanged();

                    } else {
                        Toast.makeText(MainActivity.this, jObj.getString(TAG_MESSAGE), Toast.LENGTH_LONG).show();
                    }
                } catch (JSONException e) {
                    // JSON error
                    e.printStackTrace();
                }

            }
        }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e(TAG, "Error: " + error.getMessage());
                Toast.makeText(MainActivity.this, error.getMessage(), Toast.LENGTH_LONG).show();
            }
        }) {

            @Override
            protected Map getParams() {
                // Posting parameters ke post url
                Map params = new HashMap();
                params.put("id", idx);

                return params;
            }

        };

        AppController.getInstance().addToRequestQueue(strReq, tag_json_obj);
    }

}

4. Buat activity_main.xml sebagai layout yang akan menampilkan datanya.


<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    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"
    android:fitsSystemWindows="true"
    tools:context="com.azhar.crud.MainActivity">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

    </android.support.design.widget.AppBarLayout>

    <include layout="@layout/content_main" />

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab_add"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="@dimen/fab_margin"
        android:src="@drawable/ic_fab_add" />

</android.support.design.widget.CoordinatorLayout>

5. Buat content_main.xml :


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    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"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/swipe_refresh_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <ListView
            android:id="@+id/list"
            android:divider="@color/list_divider"
            android:dividerHeight="2dp"
            android:listSelector="@drawable/list_row_selector"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

    </android.support.v4.widget.SwipeRefreshLayout>

</RelativeLayout>

6. Buat form_kontak.xml untuk mengisi data baru dan untuk mengedit data.


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin" >

    <EditText
        android:id="@+id/txt_id"
        android:visibility="gone"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:drawable/editbox_background_normal"/>

    <EditText
        android:id="@+id/txt_nama"
        android:layout_marginTop="10dp"
        android:layout_marginBottom="10dp"
        android:hint="Nama"
        android:singleLine="true"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:drawable/editbox_background_normal"/>

    <EditText
        android:id="@+id/txt_tlp"
        android:layout_marginBottom="10dp"
        android:hint="Telp"
        android:inputType="textMultiLine"
        android:minLines="3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:drawable/editbox_background_normal"/>

    <EditText
        android:id="@+id/txt_email"
        android:layout_marginBottom="10dp"
        android:hint="Email"
        android:inputType="textMultiLine"
        android:minLines="3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:drawable/editbox_background_normal"/>

</LinearLayout>

7. Buat list_row.xml :


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:padding="16dp"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

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

    <TextView
        android:id="@+id/nama"
        android:layout_marginBottom="5dp"
        android:textStyle="bold"
        android:text="Nama"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

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

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

</LinearLayout>

8. Buat KontakAdapter.java. Class ini berfungsi sebagai menampilkan data seperti id, nama, tlp dan email kemudian ditampilkan ke dalam ListView.


package com.azhar.crud.adapter;

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import com.azhar.crud.R;
import com.azhar.crud.data.Data;

import java.util.List;

/**
 * Created by Azhar Rivaldi on 27/06/2019.
 */

public class KontakAdapter extends BaseAdapter {
    private Activity activity;
    private LayoutInflater inflater;
    private List items;

    public KontakAdapter(Activity activity, List items) {
        this.activity = activity;
        this.items = items;
    }

    @Override
    public int getCount() {
        return items.size();
    }

    @Override
    public Object getItem(int location) {
        return items.get(location);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

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

        if (inflater == null)
            inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

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

        TextView id = (TextView) convertView.findViewById(R.id.id);
        TextView nama = (TextView) convertView.findViewById(R.id.nama);
        TextView tlp = (TextView) convertView.findViewById(R.id.tlp);
        TextView email = (TextView) convertView.findViewById(R.id.email);

        Data data = items.get(position);

        id.setText(data.getId());
        nama.setText(data.getNama());
        tlp.setText(data.getTlp());
        email.setText(data.getEmail());

        return convertView;
    }

}

9. Buat AppController.java. Class tunggal yang menginisialisasi class global yang diperlukan. Semua objek yang berhubungan dengan library Volley diinisialisasikan di sini.


package com.azhar.crud.app;

import android.app.Application;
import android.text.TextUtils;

import com.android.volley.DefaultRetryPolicy;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.Volley;

/**
 * Created by Azhar Rivaldi on 27/06/2019.
 */

public class AppController extends Application {

 public static final String TAG = AppController.class.getSimpleName();

 private RequestQueue mRequestQueue;

 private static AppController mInstance;

 @Override
 public void onCreate() {
  super.onCreate();
  mInstance = this;
 }

 public static synchronized AppController getInstance() {
  return mInstance;
 }

 public RequestQueue getRequestQueue() {
  if (mRequestQueue == null) {
   mRequestQueue = Volley.newRequestQueue(getApplicationContext());
  }

  return mRequestQueue;
 }

 public  void addToRequestQueue(Request req, String tag) {
  req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
  req.setRetryPolicy(new DefaultRetryPolicy(0, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
  getRequestQueue().add(req);
 }

 public  void addToRequestQueue(Request req) {
  req.setTag(TAG);
  req.setRetryPolicy(new DefaultRetryPolicy(0, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
  getRequestQueue().add(req);
 }

 public void cancelPendingRequests(Object tag) {
  if (mRequestQueue != null) {
   mRequestQueue.cancelAll(tag);
  }
 }

}


10. Buat Data.java. Class ini berfungsi sebagai membuat objek untuk setiap item yang diparsing JSON. Objek ini berisi informasi seperti id, nama, tlp dan email.


package com.azhar.crud.data;

/**
 * Created by Azhar Rivaldi on 27/06/2019.
 */

public class Data {
    private String id, nama, tlp, email;

    public Data() {
    }

    public Data(String id, String nama, String tlp, String email) {
        this.id = id;
        this.nama = nama;
        this.tlp = tlp;
        this.email = email;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getNama() {
        return nama;
    }

    public void setNama(String nama) {
        this.nama = nama;
    }

    public String getTlp() {
        return tlp;
    }

    public void setTlp(String tlp) {
        this.tlp = tlp;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.tlp = email;
    }
}


11. Buat Server.java. Class ini berfungsi mengatur link server sumber data dari Web Service yang akan digunakan menggunakan IP Address.


package com.azhar.crud.util;

/**
 * Created by Azhar Rivaldi on 27/06/2019.
 */

public class Server {
    /* Jika IP 10.0.2.2, itu adalah IP Address localhost EMULATOR ANDROID STUDIO,
    Ganti IP Address tersebut dengan IP Laptop Anda. Apabila di RUN di HP. HP dan Laptop harus 1 jaringan */
    public static final String URL = "http://192.168.115.114/android/biodata/";
}


Support Blog Rivaldi 48 agar terus bisa membagikan artikel-artikel yang bermanfaat dengan cara klik link Sociabuzz dibawah ini :
https://sociabuzz.com/azharrvldi_/donate (bisa pakai GoPay, OVO, DANA, Bank Transfer)

12. Jika semua sudah selesai, kalian Run. Jika kalian mengikuti langkah-langkah diatas dengan baik, pasti aplikasi yang kalian buat akan berjalan sebagaimana mestinya. Namun jika mengalami Error, silahkan berikan komentar dan kita diskusikan bersama. Berikut hasil aplikasinya :
Membuat Aplikasi Android CRUD Menggunakan Database MySQL dengan Library Volley
Aplikasi Android CRUD
Membuat Aplikasi Android CRUD Menggunakan Database MySQL dengan Library Volley
Aplikasi Android CRUD
Membuat Aplikasi Android CRUD Menggunakan Database MySQL dengan Library Volley
Aplikasi Android CRUD
Membuat Aplikasi Android CRUD Menggunakan Database MySQL dengan Library Volley
Aplikasi Android CRUD
Demikian informasi yang saya bagikan untuk kalian. Jangan lupa bagikan artikel ini ke teman-teman kalian agar ikut membaca Membuat Aplikasi Android CRUD Menggunakan Database MySQL dengan Library Volley ini. Subscribe juga blog Rivaldi 48 ini agar kalian mendapatkan notifikasi saat Admin update artikel terbaru. Semoga kalian lebih nyaman dan mudah dalam mengakses Blog Rivaldi 48 dimanapun kalian berada. Terima Kasih. Follow Instagram Admin @azhardvls_