Android MySQL Web Service

Database SQL

 

Web Service

Web service adalah aplikasi sekumpulan data (database), perangkat lunak (software) atau bagian dari perangkat lunak yang dapat diakses secara remote oleh berbagai piranti dengan sebuah perantara tertentu. Secara umum, web service dapat diidentifikasikan dengan menggunakan URL seperti hanya web pada umumnya. Namun yang membedakan web service dengan web pada umumnya adalah interaksi yang diberikan oleh web service. Berbeda dengan URL web pada umumnya, URL web service hanya menggandung kumpulan informasi, perintah, konfigurasi atau sintaks yang berguna membangun sebuah fungsi-fungsi tertentu dari aplikasi.

Web service dapat diartikan juga sebuah metode pertukaran data, tanpa memperhatikan dimana sebuah database ditanamkan, dibuat dalam bahasa apa, sebuah aplikasi yang mengkonsumsi data, dan di platform apa sebuah data itu dikonsumsi. Web service mampu menunjang interoperabilitas. Sehingga web service mampu menjadi sebuah jembatan penghubung antara berbagai sistem yang ada.

Menurut W3C Web services Architecture Working Group pengertian Web service adalah sebuah sistem software yang di desain untuk mendukung interoperabilitas interaksi mesin ke mesin melalui sebuah jaringan. Interfaceweb service dideskripsikan dengan menggunakan format yang mampu diproses oleh mesin (khususnya WSDL). Sistem lain yang akan berinteraksi dengan web service hanya memerlukan SOAP, yang biasanya disampaikan dengan HTTP dan XML sehingga mempunyai korelasi dengan standar Web (Web Services Architecture Working Group, 2004).

Web pada umumnya digunakan untuk melakukan respon dan request yang dilakukan antara client dan server. Sebagai contoh, seorang pengguna layanan web tertentu mengetikan alamat url web untuk membentuk sebuah request. Request akan sampai pada server, diolah dan kemudian disajikan dalam bentuk sebuah respon. Dengan singkat kata terjadilah hubungan client-server secara sederhana.

Sedangkan pada web service hubungan antara client dan server tidak terjadi secara langsung. Hubungan antara client dan server dijembatani oleh file web service dalam format tertentu. Sehingga akses terhadap database akan ditanggani tidak secara langsung oleh server, melainkan melalui perantara yang disebut sebagai web service. Peran dari web service ini akan mempermudah distribusi sekaligus integrasi database yang tersebar di beberapa server sekaligus.

 

Sumber:

http://wahidin-alambiyah-19.blogspot.co.id/2015/03/pengertian-web-service-dan-web-server.html

 

Pengertian Database MySQL

MySQL adalah sebuah perangkat lunak sistem manajemen basis data SQL (bahasa Inggris: database management system) atau DBMS yang multithread, multi-user, dengan sekitar 6 juta instalasi di seluruh dunia. MySQL AB membuat MySQL tersedia sebagai perangkat lunak gratis di bawah lisensi GNU General Public License (GPL), tetapi mereka juga menjual dibawah lisensi komersial untuk kasus-kasus dimana penggunaannya tidak cocok dengan penggunaan GPL.

Tidak seperti PHP atau Apache yang merupakan software yang dikembangkan oleh komunitas umum, dan hak cipta untuk kode sumber dimiliki oleh penulisnya masing-masing, MySQL dimiliki dan disponsori oleh sebuah perusahaan komersial Swedia yaitu MySQL AB. MySQL AB memegang penuh hak cipta hampir atas semua kode sumbernya. Kedua orang Swedia dan satu orang Finlandia yang mendirikan MySQL AB adalah: David Axmark, Allan Larsson, dan Michael “Monty” Widenius. MySQL dapat di download di situs resminya, http://www.mysql.com.

 

MySQL adalah sistem manajemen database SQL yang bersifat Open Source dan paling populer saat ini. Sistem Database MySQL mendukung beberapa fitur seperti multithreaded, multi-user, dan SQL database managemen sistem (DBMS). Database ini dibuat untuk keperluan sistem database yang cepat, handal dan mudah digunakan.

Ulf Micheal Widenius adalah penemu awal versi pertama MySQL yang kemudian pengembangan selanjutnya dilakukan oleh perusahaan MySQL AB. MySQL AB yang merupakan sebuah perusahaan komersial yang didirikan oleh para pengembang MySQL. MySQL sudah digunakan lebih dari 11 millar instalasi saat ini. Informasi-informasi terbaru mengenai MySQL dapat diperoleh dengan mengunjungi http://www.mysql.com/ .

 

Fitur MySQL

Fitur-fitur dalam database mysql antara lain sebagai beriktu :

  • Relational Database System. Seperti halnya software database lain yang ada di pasaran, MySQL termasuk RDBMS.
  • Arsitektur Client-Server. MySQL memiliki arsitektur client-server dimana server database MySQL terinstal di server. Client MySQL dapat berada di komputer yang sama dengan server, dan dapat juga di komputer lain yang berkomunikasi dengan server melalui jaringan bahkan internet.
  • Mengenal perintah SQL standar. SQL (Structured Query Language) merupakan suatu bahasa standar yang berlaku di hampir semua software database. MySQL mendukung SQL versi SQL:2003.
  • Mendukung Sub Select. Mulai versi 4.1 MySQL telah mendukung select dalam select (sub select).
  • Mendukung Views. MySQL mendukung views sejak versi 5.0
  • Mendukung Stored Prosedured (SP). MySQL mendukung SP sejak versi 5.0
  • Mendukung Triggers. MySQL mendukung trigger pada versi 5.0 namun masih terbatas. Pengembang MySQL berjanji akan meningkatkan kemampuan trigger pada versi 5.1.
  • Mendukung replication.
  • Mendukung transaksi.
  • Mendukung foreign key.
  • Tersedia fungsi GIS.
  • Free (bebas didownload)
  • Stabil dan tangguh
  • Fleksibel dengan berbagai pemrograman
  • Security yang baik
  • Dukungan dari banyak komunitas
  • Perkembangan software yang cukup cepat.

 

Kelebihan MySQL

Berikut ini beberapa kelebihan MySQL sebagai database server antara lain :

  1. Source MySQL dapat diperoleh dengan mudah dan gratis.
  2. Sintaksnya lebih mudah dipahami dan tidak rumit.
  3. Pengaksesan database dapat dilakukan dengan mudah.
  4. MySQL merupakan program yang multithreaded, sehingga dapat dipasang pada server yang memiliki multiCPU.
  5. Didukung programprogram umum seperti C, C++, Java, Perl, PHP, Python, dsb.
  6. Bekerja pada berbagai platform. (tersedia berbagai versi untuk berbagai sistem operasi).
  7. Memiliki jenis kolom yang cukup banyak sehingga memudahkan konfigurasi sistem database.
  8. Memiliki sistem sekuriti yang cukup baik dengan verifikasi host.
  9. Mendukung ODBC untuk sistem operasi Windows.
  10. Mendukung record yang memiliki kolom dengan panjang tetap atau panjang bervariasi.

 

Sumber:

http://hastomo.net/php/pengertian-dan-kelebihan-database-mysql/

https://aguzrybudy.blogspot.co.id/2015/12/pengertian-database-mysql_13.html

 

Implementasi Program Aplikasi

Membuat aplikasi android CRUD menggunakan php dan mysql sebagai webservicenya. Aplikasi yang akan dibuat serupa seperti aplikasi catatan harian atau google keep note. Jadi dengan aplikasi ini, nantinya kita akan dapat melakukan :

  • Membuat catatan baru
  • Membaca catatan yang sudah ada
  • Mengubah catatan yang sudah disimpan sebelumnya
  • Menghapus catatan yang sudah kita buat

Databasenya seperti dibawah ini:

 

WebService

Setelah selesai membuat database sekarang kita akan membuat webservicenya dengan menggunakan bahasa pemrograman PHP.

Koneksi.php

<?php

$server                    = “localhost”; // nama alamat server

$user                       = “root”; // nama user server

$password               = “”; // password server

$database = ” catatan “; // nama database

 

$connect = mysql_connect($server, $user, $password) or die (“Koneksi gagal!”);

mysql_select_db($database) or die (“Database belum siap!”);

?>

 

Create.php

<?php

include “koneksi.php”;

 

$judul      = $_POST[‘judul’];

$isi = $_POST[‘isi’];

 

class emp{}

 

if (empty($judul) || empty($isi)) {

$response = new emp();

$response->success = 0;

$response->message = “jangan kosong”;

die(json_encode($response));

} else {

$query = mysql_query(“INSERT INTO catatan (id_catatan, judul, isi) VALUES(0,'”.$judul.”‘,'”.$isi.”‘)”);

 

if ($query) {

$response = new emp();

$response->success = 1;

$response->message = “Data berhasil di simpan”;

die(json_encode($response));

} else{

$response = new emp();

$response->success = 0;

$response->message = “Data tidak berhasil di simpan”;

die(json_encode($response));

}

}

?>

 

Read.php

<?php

include “koneksi.php”;

$query = mysql_query(“SELECT * FROM catatan ORDER BY judul ASC”);

$json = array();

while($row = mysql_fetch_assoc($query)){

$json[] = $row;

}

echo json_encode($json);

mysql_close($connect);

?>

 

Edit.php

<?php

include “koneksi.php”;

 

$id           = $_POST[‘id_catatan’];

 

class emp{}

 

if (empty($id)) {

$response = new emp();

$response->success = 0;

$response->message = “Error Mengambil Data”;

die(json_encode($response));

} else {

$query     = mysql_query(“SELECT * FROM catatan WHERE id_catatan='”.$id.”‘”);

$row        = mysql_fetch_array($query);

 

if (!empty($row)) {

$response = new emp();

$response->success = 1;

$response->id_catatan = $row[“id_catatan”];

$response->judul = $row[“judul”];

$response->isi = $row[“isi”];

die(json_encode($response));

} else{

$response = new emp();

$response->success = 0;

$response->message = “Error Mengambil Data”;

die(json_encode($response));

}

}

?>

 

Update.php

<?php

include “koneksi.php”;

 

$id           = $_POST[‘id’];

$judul      = $_POST[‘judul’];

$isi = $_POST[‘isi’];

 

class emp{}

 

if (empty($id) || empty($judul) || empty($isi)) {

$response = new emp();

$response->success = 0;

$response->message = “Jangan kosong”;

die(json_encode($response));

} else {

$query = mysql_query(“UPDATE catatan SET judul='”.$judul.”‘, isi='”.$isi.”‘ WHERE id_catatan='”.$id.”‘”);

 

if ($query) {

$response = new emp();

$response->success = 1;

$response->message = “Data berhasil di update”;

die(json_encode($response));

} else{

$response = new emp();

$response->success = 0;

$response->message = “Error update Data”;

die(json_encode($response));

}

}

?>

 

Delete.php

<?php

include “koneksi.php”;

 

$id           = $_POST[‘id’];

 

class emp{}

 

if (empty($id)) {

$response = new emp();

$response->success = 0;

$response->message = “data tidak terhapus”;

die(json_encode($response));

} else {

$query = mysql_query(“DELETE FROM catatan WHERE id_catatan='”.$id.”‘”);

 

if ($query) {

$response = new emp();

$response->success = 1;

$response->message = “Data terhapus”;

die(json_encode($response));

} else{

$response = new emp();

$response->success = 0;

$response->message = “Data tidak terhapus”;

die(json_encode($response));

}

}

?>

 

 

ANDROID PROJECT

Jika sudah selesai dengan file phpnya atau apinya maka sekarang kita akan membuat aplikasi androidnya. Pertama-tama kita akan mengubah gradle:

Gradle

Gradle Scripts->build.gradle (Module: app)

dependencies {

compile fileTree(dir: ‘libs’, include: [‘*.jar’])

testCompile ‘junit:junit:4.12’

compile ‘com.android.support:appcompat-v7:23.2.1’

compile ‘com.android.support:design:23.2.1’

compile ‘com.mcxiaoke.volley:library-aar:1.0.0’

}

 

Layout

  • xml

<?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.androidbelajar.catatan.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=”@android:drawable/ic_input_add” />

 

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

 

  • 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”

xmlns:tools=”http://schemas.android.com/tools”

android:layout_width=”match_parent”

android:layout_height=”match_parent”

android:background=”#fff”

app:layout_behavior=”@string/appbar_scrolling_view_behavior”

tools:context=”com.androidbelajar.catatan.MainActivity”

tools:showIn=”@layout/activity_main”>

 

<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>

 

  • xml

<?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_ids”

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_juduls”

android:layout_marginTop=”10dp”

android:layout_marginBottom=”10dp”

android:hint=”Judul”

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_isis”

android:layout_marginBottom=”10dp”

android:hint=”Isi”

android:inputType=”textMultiLine”

android:minLines=”3″

android:layout_width=”match_parent”

android:layout_height=”wrap_content”

android:background=”@android:drawable/editbox_background_normal”/>

 

</LinearLayout>

 

  • 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/judul”

android:layout_marginBottom=”5dp”

android:textStyle=”bold”

android:layout_width=”wrap_content”

android:layout_height=”wrap_content” />

 

<TextView

android:id=”@+id/isi”

android:layout_width=”wrap_content”

android:layout_height=”wrap_content” />

 

</LinearLayout>

 

Package Drawable pada RES

  • xml

<?xml version=”1.0″ encoding=”utf-8″?>

<selector xmlns:android=”http://schemas.android.com/apk/res/android”>

 

<item android:drawable=”@drawable/list_row_bg” android:state_pressed=”false” android:state_selected=”false”/>

<item android:drawable=”@drawable/list_row_bg_hover” android:state_pressed=”true”/>

<item android:drawable=”@drawable/list_row_bg_hover” android:state_pressed=”false” android:state_selected=”true”/>

 

</selector>

 

  • xml

 

<?xml version=”1.0″ encoding=”utf-8″?>

<shape xmlns:android=”http://schemas.android.com/apk/res/android”

android:shape=”rectangle” >

<gradient

android:angle=”270″

android:endColor=”@color/list_row_hover_end_color”

android:startColor=”@color/list_row_hover_start_color” />

</shape>

 

 

 

 

  • xml

<?xml version=”1.0″ encoding=”utf-8″?>

<shape xmlns:android=”http://schemas.android.com/apk/res/android”

android:shape=”rectangle”>

<gradient

android:startColor=”@color/list_row_start_color”

android:endColor=”@color/list_row_end_color”

android:angle=”270″ />

</shape>

 

package res->values ->color

<resources>

<color name=”colorPrimary”>#3F51B5</color>

<color name=”colorPrimaryDark”>#303F9F</color>

<color name=”colorAccent”>#FF4081</color>

<color name=”list_divider”>#d9d9d9</color>

<color name=”list_row_start_color”>#ffffff</color>

<color name=”list_row_end_color”>#ffffff</color>

<color name=”list_row_hover_start_color”>#ebeef0</color>

<color name=”list_row_hover_end_color”>#ebeef0</color>

</resources>

 

LOGIC & JAVA

Pertama-tama agar direktori dari app kita ini terlihat rapih dan mudah untuk kita organisir maka kita akan membuat beberapa package sesuai dengan fungsinya. Caranya klik kanan pada package utama lalu new->android package. Packagenya buat seperti pada gambar dibawah ini

Package adapter

Kita akan mulai dari package adapter. Pada package ini buatlah file java baru dengan nama Adapter. File ini akan berfungsi sebagai penyimpan data sementara dan menghubungkannya dengan listview. Pada file ini masukan code berikut

package com.androidbelajar.catatan.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.androidbelajar.catatan.R;

import com.androidbelajar.catatan.getset.Data;

 

import java.util.List;

 

/**

* Created by Philipus on 26/07/2016.

*/

public class Adapter extends BaseAdapter {

private Activity activity;

private LayoutInflater inflater;

private List<Data> items;

 

public Adapter(Activity activity, List<Data> 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 judul = (TextView) convertView.findViewById(R.id.judul);

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

 

Data data = items.get(position);

 

id.setText(data.getId());

judul.setText(data.getJudul());

isi.setText(data.getIsi());

 

return convertView;

}

 

}

 

Package getset

Pada package getset buat file baru dan beri nama Data. Fungsi dari file ini nantinya adalah untuk getter dan setter. Jadi file inilah yang menarik data yang sudah di load dari volley dan mensetnya kedalam variable. Kemudian ketika adapter ingin menampilkan ke listview file inilah yang dipanggil untuk narik datanya. Oke codenya seperti ini

public class Data {

private String id, judul, isi;

 

public Data() {

}

 

public Data(String id, String judul, String isi) {

this.id = id;

this.judul = judul;

this.isi = isi;

}

 

public String getId() {

return id;

}

 

public void setId(String id) {

this.id = id;

}

 

public String getJudul() {

return judul;

}

 

public void setJudul(String judul) {

this.judul = judul;

}

 

public String getIsi() {

return isi;

}

 

public void setIsi(String isi) {

this.isi = isi;

}

}

 

Package url

Pada package ini buatlah file baru bernama Server. File ini nantinya berfungsi sebagai penyimpan url-url yang dibutuhkan oleh library volley dalam mengakses webservice yang kita inginkan. Codenya seperti ini

public class Server {

// sesuaikan dengan nama domain hosting atau IP Address PC/laptop atau ip address emulator android 10.0.2.2

public static final String URL = “http://mhazbi.com/crudandroid/”;

}

 

Package volley

Package ini akan berisi fungsi-fungsi atau perintah-perintah dari library volley seperti request, cancelation dll. Codenya seperti ini :

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 <T> void addToRequestQueue(Request<T> req, String tag) {

req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);

getRequestQueue().add(req);

}

 

public <T> void addToRequestQueue(Request<T> req) {

req.setTag(TAG);

getRequestQueue().add(req);

}

 

public void cancelPendingRequests(Object tag) {

if (mRequestQueue != null) {

mRequestQueue.cancelAll(tag);

}

}

}

 

Nah sekarang kita sudah mengisi semua package yang ada, sekarang saatnya untuk masuk ke kelas terakhir yaitu kelas utama kita MainActivity.java. Pada kelas ini kita akan menaruh fungsi-fungsi utama untuk menjalankan aplikasi ini. Codenya seperti ini :

public class MainActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener {

 

Toolbar toolbar;

FloatingActionButton fab;

ListView list;

SwipeRefreshLayout swipe;

List<Data> itemList = new ArrayList<Data>();

Adapter adapter;

int success;

AlertDialog.Builder dialog;

LayoutInflater inflater;

View dialogView;

EditText txt_id, txt_judul, txt_isi;

String id, judul, isi;

 

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

 

private static String url_read      = Server.URL + “Read.php”;

private static String url_create    = Server.URL + “Create.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_catatan”;

public static final String TAG_JUDUL     = “judul”;

public static final String TAG_ISI   = “isi”;

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 variabel 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 Adapter(MainActivity.this, itemList);

list.setAdapter(adapter);

 

// menampilkan refresh widget

swipe.setOnRefreshListener(this);

 

swipe.post(new Runnable() {

@Override

public void run() {

swipe.setRefreshing(true);

itemList.clear();

adapter.notifyDataSetChanged();

koneksi();

}

}

);

 

// manggil dialog catatan

fab.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

DialogForm(“”, “”, “”, “SIMPAN”);

}

});

 

// listview diklik akan menampilkan dua pilihan edit atau delete data

list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override

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

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();

}

});

}

 

@Override

public void onRefresh() {

itemList.clear();

adapter.notifyDataSetChanged();

koneksi();

}

 

// untuk clear edittext pada form

private void kosong(){

txt_id.setText(null);

txt_judul.setText(null);

txt_isi.setText(null);

}

 

// untuk menampilkan dialog catatan

private void DialogForm(String idx, String juduls, String isis, String button) {

dialog = new AlertDialog.Builder(MainActivity.this);

inflater = getLayoutInflater();

dialogView = inflater.inflate(R.layout.catatan, null);

dialog.setView(dialogView);

dialog.setCancelable(true);

dialog.setIcon(R.mipmap.ic_launcher);

dialog.setTitle(“Catatan”);

 

txt_id      = (EditText) dialogView.findViewById(R.id.txt_ids);

txt_judul    = (EditText) dialogView.findViewById(R.id.txt_juduls);

txt_isi  = (EditText) dialogView.findViewById(R.id.txt_isis);

 

if (!idx.isEmpty()){

txt_id.setText(idx);

txt_judul.setText(juduls);

txt_isi.setText(isis);

} else {

kosong();

}

 

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

 

@Override

public void onClick(DialogInterface dialog, int which) {

id      = txt_id.getText().toString();

judul    = txt_judul.getText().toString();

isi  = txt_isi.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 seluruh data pada listview

private void koneksi(){

itemList.clear();

adapter.notifyDataSetChanged();

swipe.setRefreshing(true);

 

// membuat req array dengan JSON

JsonArrayRequest jArr = new JsonArrayRequest(url_read, new Response.Listener<JSONArray>() {

@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.setJudul(obj.getString(TAG_JUDUL));

item.setIsi(obj.getString(TAG_ISI));

 

// menambah item ke array

itemList.add(item);

} catch (JSONException e) {

e.printStackTrace();

}

}

 

// notifikasi perubahan data 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 antrian request

AppController.getInstance().addToRequestQueue(jArr);

}

 

// fungsi untuk simpan atau ubah

private void simpan_update() {

String url;

// jika id kosong maka simpan, jika id ada nilainya maka ubah

if (id.isEmpty()){

url = url_create;

} else {

url = url_update;

}

 

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

 

@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(“Add/update”, jObj.toString());

 

koneksi();

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<String, String> getParams() {

// Posting parameter ke post url

Map<String, String> params = new HashMap<String, String>();

// jika id kosong maka simpan, jika id ada nilainya maka ubah

if (id.isEmpty()){

params.put(“judul”, judul);

params.put(“isi”, isi);

} else {

params.put(“id”, id);

params.put(“judul”, judul);

params.put(“isi”, isi);

}

 

return params;

}

 

};

 

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

}

 

// fungsi untuk get edit data

private void edit(final String idx){

StringRequest strReq = new StringRequest(Request.Method.POST, url_edit, new Response.Listener<String>() {

 

@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(“get edit data”, jObj.toString());

String idx      = jObj.getString(TAG_ID);

String namax    = jObj.getString(TAG_JUDUL);

String alamatx  = jObj.getString(TAG_ISI);

 

DialogForm(idx, namax, alamatx, “UBAH”);

 

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<String, String> getParams() {

// Posting parameters ke post webservice

Map<String, String> params = new HashMap<String, String>();

params.put(“id_catatan”, idx);

 

return params;

}

 

};

 

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

}

 

// fungsi untuk hapus

private void delete(final String idx){

StringRequest strReq = new StringRequest(Request.Method.POST, url_delete, new Response.Listener<String>() {

 

@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(“delete”, jObj.toString());

 

koneksi();

 

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<String, String> getParams() {

// Posting parameters ke post url

Map<String, String> params = new HashMap<String, String>();

params.put(“id”, idx);

 

return params;

}

 

};

 

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

}

 

}

 

Manifest

Nah yang terakhir jangan lupa nih untuk ngeubah file ini. Didalam file ini kita akan memasukan perijinan internet dan access network state. Kemudian kita juga akan memasukan fungsi-fungsi volley kita. Sekarang masukan code dibawah ini ke AndroidManifest.xml

<?xml version=”1.0″ encoding=”utf-8″?>

<manifest xmlns:android=”http://schemas.android.com/apk/res/android”

package=”com.androidbelajar.catatan”>

 

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

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

 

<application

android:name=”com.androidbelajar.catatan.volley.AppController”

android:allowBackup=”true”

android:icon=”@mipmap/ic_launcher”

android:label=”@string/app_name”

android:supportsRtl=”true”

android:theme=”@style/AppTheme”>

<activity

android:name=”com.androidbelajar.catatan.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>

 

Tampilan Aplikasi

 

Sumber:

http://codeborneo.com/belajar-membuat-aplikasi-android-crud-menggunakan-php-dan-mysql/