CRUD Android dengan database Mysql

Aplikasi yang menggunakan database pada umumnya memiliki fungsi sebagai berikut :

  • Menampilkan data
  • Menambah data
  • Menghapus data
  • Merubah data

Database SQLite pada android mempunyai keterbatasan pada salah satunya pada kapasitas penyimpanan data. Akan bermasalah apabila kita memaksakan menyimpan data yang besar (lebih dari 10000 data) pada SQLite. Selain itu jika kita ingin perubahan data aplikasi dirasakan oleh semua user tanpa harus install ulang aplikasi, maka data harus disimpan di Server. Cara yang paling sering digunakan adalah dengan perantara Webserver, PHP dan MySQL. Dimana android untuk melakukan perubahan data atau mendapatkan data dari database server cukup dengan memanggil url php yang telah ditentukan.

Agar lebih dimengerti mari kita buat aplikasi tentang crud sederhana yang database servernya menggunakan MySQL dengan Web Server Apache dan Server Side Scriptnya menggunakan PHP untuk itu hal yang penting untuk dilakukan sebelum memulai pembuatan aplikasinya adalah menyiaplkan environment servernya dengan menginstall XAMPP (Windows) atau LAMP (Linux). Setelah selesai Instalasi lalu kita lakukan langkah-langkah yang ada pada document dibawah ini.

ok

# Pertama  Buat database dengan  nama “detailproducts” dengan nama tabel Products, dan field seperti dibawah ini :

–>  pid                                                : integer (auto increment)

–>  name                                            : varchar (50)

–>  price                                             : numeric (length 10 decimal 2)

–>  description                                  : text

–>  created_at timestamp               : <Insert-TimeStamp>

# Langkah kedua kita akan membuat middle ware berupa file berekstensi .php

Langkah satu buat file dan beri nama db_config.php

<?php

define(‘DB_USER’, “root”); // user database

define(‘DB_PASSWORD’, “”); // password database

define(‘DB_DATABASE’, “deatailproducts”); // nama database

define(‘DB_SERVER’, “localhost”); // server

?>

Langkah dua buat file dengan nama db_connect.php

<?php

/**
* A class file to connect to database
*/
class DB_CONNECT {

// constructor
function __construct() {
// connecting to database
$this->connect();
}

// destructor
function __destruct() {
// closing db connection
$this->close();
}

/**
* Function to connect with database
*/
function connect() {
// import database connection variables
require_once __DIR__ . ‘/db_config.php’;

// Connecting to mysql database
$con = mysql_connect(DB_SERVER, DB_USER, DB_PASSWORD) or die(mysql_error());

// Selecing database
$db = mysql_select_db(DB_DATABASE) or die(mysql_error()) or die(mysql_error());

// returing connection cursor
return $con;
}

/**
* Function to close db connection
*/
function close() {
// closing db connection
mysql_close();
}

}

?>

Langkah ketiga buat file dan beri nama delete_product.php

<?php

/*
* Following code will delete a product from table
* A product is identified by product id (pid)
*/

// array for JSON response
$response = array();

// check for required fields
if (isset($_POST[‘pid’])) {
$pid = $_POST[‘pid’];

// include db connect class
require_once __DIR__ . ‘/db_connect.php’;

// connecting to db
$db = new DB_CONNECT();

// mysql update row with matched pid
$result = mysql_query(“DELETE FROM products WHERE pid = $pid”);

// check if row deleted or not
if (mysql_affected_rows() > 0) {
// successfully updated
$response[“success”] = 1;
$response[“message”] = “Product successfully deleted”;

// echoing JSON response
echo json_encode($response);
} else {
// no product found
$response[“success”] = 0;
$response[“message”] = “No product found”;

// echo no users JSON
echo json_encode($response);
}
} else {
// required field is missing
$response[“success”] = 0;
$response[“message”] = “Required field(s) is missing”;

// echoing JSON response
echo json_encode($response);
}
?>

Langkah ke-empat buat file dengan nama create_product.php

<?php

/*
* Following code will create a new product row
* All product details are read from HTTP Post Request
*/

// array for JSON response
$response = array();

// check for required fields
if (isset($_POST[‘name’]) && isset($_POST[‘price’]) && isset($_POST[‘description’])) {

$name = $_POST[‘name’];
$price = $_POST[‘price’];
$description = $_POST[‘description’];

// include db connect class
require_once __DIR__ . ‘/db_connect.php’;

// connecting to db
$db = new DB_CONNECT();

// mysql inserting a new row
$result = mysql_query(“INSERT INTO products(name, price, description) VALUES(‘$name’, ‘$price’, ‘$description’)”);

// check if row inserted or not
if ($result) {
// successfully inserted into database
$response[“success”] = 1;
$response[“message”] = “Product successfully created.”;

// echoing JSON response
echo json_encode($response);
} else {
// failed to insert row
$response[“success”] = 0;
$response[“message”] = “Oops! An error occurred.”;

// echoing JSON response
echo json_encode($response);
}
} else {
// required field is missing
$response[“success”] = 0;
$response[“message”] = “Required field(s) is missing”;

// echoing JSON response
echo json_encode($response);
}
?>

Langkah ke-Lima kita buat file dengan nama get_all_products.php

<?php

/*
* Following code will list all the products
*/

// array for JSON response
$response = array();

// include db connect class
require_once __DIR__ . ‘/db_connect.php’;

// connecting to db
$db = new DB_CONNECT();

// get all products from products table
$result = mysql_query(“SELECT *FROM products”) or die(mysql_error());

// check for empty result
if (mysql_num_rows($result) > 0) {
// looping through all results
// products node
$response[“products”] = array();

while ($row = mysql_fetch_array($result)) {
// temp user array
$product = array();
$product[“pid”] = $row[“pid”];
$product[“name”] = $row[“name”];
$product[“price”] = $row[“price”];
$product[“description”] = $row[“description”];
$product[“created_at”] = $row[“created_at”];
$product[“updated_at”] = $row[“updated_at”];

// push single product into final response array
array_push($response[“products”], $product);
}
// success
$response[“success”] = 1;

// echoing JSON response
echo json_encode($response);
} else {
// no products found
$response[“success”] = 0;
$response[“message”] = “No products found”;

// echo no users JSON
echo json_encode($response);
}
?>

Langkah ke-Enam kita buat file dengan nama get_products_detail.php

<?php

/*
* Following code will get single product details
* A product is identified by product id (pid)
*/

// array for JSON response
$response = array();

// include db connect class
require_once __DIR__ . ‘/db_connect.php’;

// connecting to db
$db = new DB_CONNECT();

// check for post data
if (isset($_GET[“pid”])) {
$pid = $_GET[‘pid’];

// get a product from products table
$result = mysql_query(“SELECT *FROM products WHERE pid = $pid”);

if (!empty($result)) {
// check for empty result
if (mysql_num_rows($result) > 0) {

$result = mysql_fetch_array($result);

$product = array();
$product[“pid”] = $result[“pid”];
$product[“name”] = $result[“name”];
$product[“price”] = $result[“price”];
$product[“description”] = $result[“description”];
$product[“created_at”] = $result[“created_at”];
$product[“updated_at”] = $result[“updated_at”];
// success
$response[“success”] = 1;

// user node
$response[“product”] = array();

array_push($response[“product”], $product);

// echoing JSON response
echo json_encode($response);
} else {
// no product found
$response[“success”] = 0;
$response[“message”] = “No product found”;

// echo no users JSON
echo json_encode($response);
}
} else {
// no product found
$response[“success”] = 0;
$response[“message”] = “No product found”;

// echo no users JSON
echo json_encode($response);
}
} else {
// required field is missing
$response[“success”] = 0;
$response[“message”] = “Required field(s) is missing”;

// echoing JSON response
echo json_encode($response);
}
?>

Langkah terakhir yang ke-Tujuh kita buat file dengan nama update_product.php

<?php

/*
* Following code will update a product information
* A product is identified by product id (pid)
*/

// array for JSON response
$response = array();

// check for required fields
if (isset($_POST[‘pid’]) && isset($_POST[‘name’]) && isset($_POST[‘price’]) && isset($_POST[‘description’])) {

$pid = $_POST[‘pid’];
$name = $_POST[‘name’];
$price = $_POST[‘price’];
$description = $_POST[‘description’];

// include db connect class
require_once __DIR__ . ‘/db_connect.php’;

// connecting to db
$db = new DB_CONNECT();

// mysql update row with matched pid
$result = mysql_query(“UPDATE products SET name = ‘$name’, price = ‘$price’, description = ‘$description’ WHERE pid = $pid”);

// check if row inserted or not
if ($result) {
// successfully updated
$response[“success”] = 1;
$response[“message”] = “Product successfully updated.”;

// echoing JSON response
echo json_encode($response);
} else {

}
} else {
// required field is missing
$response[“success”] = 0;
$response[“message”] = “Required field(s) is missing”;

// echoing JSON response
echo json_encode($response);
}
?>

NB : Lalu letakkan semua file .php yang telah dibuat didalam satu folder dengan nama “android_connect” lalu letakkan di folder localhost anda yaitu C:\xampp\htdocs\android_connect

Sampai pada step kita lihat susunan layout di eclipse seperti berikut :

android1

Tugas kita dalah membuat file dengan susunan activity dan layout aplikasi android sama persis dengan gambar diatas….oke

Tahap Membuat Layout :

1. Buat file dengan nama main_screen.xml
main

<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
android:orientation=”vertical”
android:gravity=”center_horizontal”>

<!–  Sample Dashboard screen with Two buttons –>
<Button android:id=”@+id/btnViewProducts”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”View Products”
android:layout_marginTop=”25dip”/>

<Button android:id=”@+id/btnCreateProduct”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”Add New Products”
android:layout_marginTop=”25dip”/>

</LinearLayout>

2. Buat file dengan nama add_product.xml
addproduct

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

<!– Name Label –>
<TextView android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”Product Name”
android:paddingLeft=”10dip”
android:paddingRight=”10dip”
android:paddingTop=”10dip”
android:textSize=”17dip”/>

<!– Input Name –>
<EditText android:id=”@+id/inputName”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:layout_margin=”5dip”
android:layout_marginBottom=”15dip”
android:singleLine=”true”/>

<!– Price Label –>
<TextView android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”Price”
android:paddingLeft=”10dip”
android:paddingRight=”10dip”
android:paddingTop=”10dip”
android:textSize=”17dip”/>

<!– Input Price –>
<EditText android:id=”@+id/inputPrice”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:layout_margin=”5dip”
android:layout_marginBottom=”15dip”
android:singleLine=”true”
android:inputType=”numberDecimal”/>

<!– Description Label –>
<TextView android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”Description”
android:paddingLeft=”10dip”
android:paddingRight=”10dip”
android:paddingTop=”10dip”
android:textSize=”17dip”/>

<!– Input description –>
<EditText android:id=”@+id/inputDesc”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:layout_margin=”5dip”
android:layout_marginBottom=”15dip”
android:lines=”4″
android:gravity=”top”/>

<!– Button Create Product –>
<Button android:id=”@+id/btnCreateProduct”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”Create Product”/>

</LinearLayout>

3. Buat file dengan nama all_products.xml
allproduct

<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
android:orientation=”vertical”>
<!– Main ListView
Always give id value as list(@android:id/list)
–>
<ListView
android:id=”@android:id/list”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”/>

</LinearLayout>

4 Buat file dengan nama edit_product.xml
editproduct

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

<!– Name Label –>
<TextView android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”Product Name”
android:paddingLeft=”10dip”
android:paddingRight=”10dip”
android:paddingTop=”10dip”
android:textSize=”17dip”/>

<!– Input Name –>
<EditText android:id=”@+id/inputName”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:layout_margin=”5dip”
android:layout_marginBottom=”15dip”
android:singleLine=”true”/>

<!– Price Label –>
<TextView android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”Price”
android:paddingLeft=”10dip”
android:paddingRight=”10dip”
android:paddingTop=”10dip”
android:textSize=”17dip”/>

<!– Input Price –>
<EditText android:id=”@+id/inputPrice”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:layout_margin=”5dip”
android:layout_marginBottom=”15dip”
android:singleLine=”true”
android:inputType=”numberDecimal”/>

<!– Description Label –>
<TextView android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”Description”
android:paddingLeft=”10dip”
android:paddingRight=”10dip”
android:paddingTop=”10dip”
android:textSize=”17dip”/>

<!– Input description –>
<EditText android:id=”@+id/inputDesc”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:layout_margin=”5dip”
android:layout_marginBottom=”15dip”
android:lines=”4″
android:gravity=”top”/>

<LinearLayout android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:orientation=”horizontal”>
<!– Button Create Product –>
<Button android:id=”@+id/btnSave”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”Save Changes”
android:layout_weight=”1″/>

<!– Button Create Product –>
<Button android:id=”@+id/btnDelete”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”Delete”
android:layout_weight=”1″/>
</LinearLayout>

</LinearLayout>

5. Buat file dengan nama list_item.xml
listitem

<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:orientation=”vertical” >

<!– Product id (pid) – will be HIDDEN – used to pass to other activity –>
<TextView
android:id=”@+id/pid”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:visibility=”gone” />

<!– Name Label –>
<TextView
android:id=”@+id/name”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:paddingTop=”6dip”
android:paddingLeft=”6dip”
android:textSize=”17dip”
android:textStyle=”bold” />

</LinearLayout>

Langkah Membuat Activity :

Layout di android dimaksudkan sebagai tampilan sedangkan activity adalah barisan koding untuk menjalankan perintah seperti ganti halaman dan proses edit delete.

1. Buat file dengan nama JSONParser.java untuk koneksi dengan file .php yang telah dibuat tadi.

package com.example.androidhive;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;

import android.util.Log;

public class JSONParser {

static InputStream is = null;
static JSONObject jObj = null;
static String json = “”;

// constructor
public JSONParser() {

}

// function get json from url
// by making HTTP POST or GET mehtod
public JSONObject makeHttpRequest(String url, String method,
List<NameValuePair> params) {

// Making HTTP request
try {

// check for request method
if(method == “POST”){
// request method is POST
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params));

HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();

}else if(method == “GET”){
// request method is GET
DefaultHttpClient httpClient = new DefaultHttpClient();
String paramString = URLEncodedUtils.format(params, “utf-8”);
url += “?” + paramString;
HttpGet httpGet = new HttpGet(url);

HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
}

} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, “iso-8859-1”), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + “\n”);
}
is.close();
json = sb.toString();
} catch (Exception e) {
Log.e(“Buffer Error”, “Error converting result ” + e.toString());
}

// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e(“JSON Parser”, “Error parsing data ” + e.toString());
}

// return JSON String
return jObj;

}
}

2. Kita buat file dengan nama MainScreenActivity.java

package com.example.androidhive;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainScreenActivity extends Activity{

Button btnViewProducts;
Button btnNewProduct;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_screen);

// Buttons
btnViewProducts = (Button) findViewById(R.id.btnViewProducts);
btnNewProduct = (Button) findViewById(R.id.btnCreateProduct);

// view products click event
btnViewProducts.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View view) {
// Launching All products Activity
Intent i = new Intent(getApplicationContext(), AllProductsActivity.class);
startActivity(i);

}
});

// view products click event
btnNewProduct.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View view) {
// Launching create new product activity
Intent i = new Intent(getApplicationContext(), NewProductActivity.class);
startActivity(i);

}
});
}
}

3. Thap ke-Tiga Buat file dengan nama NewProductActivity.java

package com.example.androidhive;

import java.util.ArrayList;
import java.util.List;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;

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

public class NewProductActivity extends Activity {

// Progress Dialog
private ProgressDialog pDialog;

JSONParser jsonParser = new JSONParser();
EditText inputName;
EditText inputPrice;
EditText inputDesc;

// url to create new product
private static String url_create_product = “http://192.168.43.160/android_connect/create_product.php”;

// JSON Node names
private static final String TAG_SUCCESS = “success”;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.add_product);

// Edit Text
inputName = (EditText) findViewById(R.id.inputName);
inputPrice = (EditText) findViewById(R.id.inputPrice);
inputDesc = (EditText) findViewById(R.id.inputDesc);

// Create button
Button btnCreateProduct = (Button) findViewById(R.id.btnCreateProduct);

// button click event
btnCreateProduct.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View view) {
// creating new product in background thread
new CreateNewProduct().execute();
}
});
}

/**
* Background Async Task to Create new product
* */
class CreateNewProduct extends AsyncTask<String, String, String> {

/**
* Before starting background thread Show Progress Dialog
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(NewProductActivity.this);
pDialog.setMessage(“Creating Product..”);
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}

/**
* Creating product
* */
protected String doInBackground(String… args) {
String name = inputName.getText().toString();
String price = inputPrice.getText().toString();
String description = inputDesc.getText().toString();

// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair(“name”, name));
params.add(new BasicNameValuePair(“price”, price));
params.add(new BasicNameValuePair(“description”, description));

// getting JSON Object
// Note that create product url accepts POST method
JSONObject json = jsonParser.makeHttpRequest(url_create_product,
“POST”, params);

// check log cat fro response
Log.d(“Create Response”, json.toString());

// check for success tag
try {
int success = json.getInt(TAG_SUCCESS);

if (success == 1) {
// successfully created product
Intent i = new Intent(getApplicationContext(), AllProductsActivity.class);
startActivity(i);

// closing this screen
finish();
} else {
// failed to create product
}
} catch (JSONException e) {
e.printStackTrace();
}

return null;
}

/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(String file_url) {
// dismiss the dialog once done
pDialog.dismiss();
}

}
}

4. Ke-Empat Buat file dengan nama AllProductsActivity.java.

package com.example.androidhive;

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

import org.apache.http.NameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

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

public class AllProductsActivity extends ListActivity {

// Progress Dialog
private ProgressDialog pDialog;

// Creating JSON Parser object
JSONParser jParser = new JSONParser();

ArrayList<HashMap<String, String>> productsList;

// url to get all products list
private static String url_all_products = “http://192.168.43.160/android_connect/get_all_products.php”;

// JSON Node names
private static final String TAG_SUCCESS = “success”;
private static final String TAG_PRODUCTS = “products”;
private static final String TAG_PID = “pid”;
private static final String TAG_NAME = “name”;

// products JSONArray
JSONArray products = null;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.all_products);

// Hashmap for ListView
productsList = new ArrayList<HashMap<String, String>>();

// Loading products in Background Thread
new LoadAllProducts().execute();

// Get listview
ListView lv = getListView();

// on seleting single product
// launching Edit Product Screen
lv.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// getting values from selected ListItem
String pid = ((TextView) view.findViewById(R.id.pid)).getText()
.toString();

// Starting new intent
Intent in = new Intent(getApplicationContext(),
EditProductActivity.class);
// sending pid to next activity
in.putExtra(TAG_PID, pid);

// starting new activity and expecting some response back
startActivityForResult(in, 100);
}
});

}

// Response from Edit Product Activity
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// if result code 100
if (resultCode == 100) {
// if result code 100 is received
// means user edited/deleted product
// reload this screen again
Intent intent = getIntent();
finish();
startActivity(intent);
}

}

/**
* Background Async Task to Load all product by making HTTP Request
* */
class LoadAllProducts extends AsyncTask<String, String, String> {

/**
* Before starting background thread Show Progress Dialog
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(AllProductsActivity.this);
pDialog.setMessage(“Loading products. Please wait…”);
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}

/**
* getting All products from url
* */
protected String doInBackground(String… args) {
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
// getting JSON string from URL
JSONObject json = jParser.makeHttpRequest(url_all_products, “GET”, params);

// Check your log cat for JSON reponse
Log.d(“All Products: “, json.toString());

try {
// Checking for SUCCESS TAG
int success = json.getInt(TAG_SUCCESS);

if (success == 1) {
// products found
// Getting Array of Products
products = json.getJSONArray(TAG_PRODUCTS);

// looping through All Products
for (int i = 0; i < products.length(); i++) {
JSONObject c = products.getJSONObject(i);

// Storing each json item in variable
String id = c.getString(TAG_PID);
String name = c.getString(TAG_NAME);

// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();

// adding each child node to HashMap key => value
map.put(TAG_PID, id);
map.put(TAG_NAME, name);

// adding HashList to ArrayList
productsList.add(map);
}
} else {
// no products found
// Launch Add New product Activity
Intent i = new Intent(getApplicationContext(),
NewProductActivity.class);
// Closing all previous activities
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
}
} catch (JSONException e) {
e.printStackTrace();
}

return null;
}

/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(String file_url) {
// dismiss the dialog after getting all products
pDialog.dismiss();
// updating UI from Background Thread
runOnUiThread(new Runnable() {
public void run() {
/**
* Updating parsed JSON data into ListView
* */
ListAdapter adapter = new SimpleAdapter(
AllProductsActivity.this, productsList,
R.layout.list_item, new String[] { TAG_PID,
TAG_NAME},
new int[] { R.id.pid, R.id.name });
// updating listview
setListAdapter(adapter);
}
});

}

}
}

5. Dan terkhir kita buat file dengan nama EditProductActivity.java.

package com.example.androidhive;

import java.util.ArrayList;
import java.util.List;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

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

public class EditProductActivity extends Activity {

EditText txtName;
EditText txtPrice;
EditText txtDesc;
EditText txtCreatedAt;
Button btnSave;
Button btnDelete;

String pid;

// Progress Dialog
private ProgressDialog pDialog;

// JSON parser class
JSONParser jsonParser = new JSONParser();

// single product url
private static final String url_product_detials = “http://192.168.43.160/android_connect/get_product_details.php”;

// url to update product
private static final String url_update_product = “http://192.168.43.160/android_connect/update_product.php”;

// url to delete product
private static final String url_delete_product = “http://192.168.43.160/android_connect/delete_product.php”;

// JSON Node names
private static final String TAG_SUCCESS = “success”;
private static final String TAG_PRODUCT = “product”;
private static final String TAG_PID = “pid”;
private static final String TAG_NAME = “name”;
private static final String TAG_PRICE = “price”;
private static final String TAG_DESCRIPTION = “description”;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.edit_product);

// save button
btnSave = (Button) findViewById(R.id.btnSave);
btnDelete = (Button) findViewById(R.id.btnDelete);

// getting product details from intent
Intent i = getIntent();

// getting product id (pid) from intent
pid = i.getStringExtra(TAG_PID);

// Getting complete product details in background thread
new GetProductDetails().execute();

// save button click event
btnSave.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View arg0) {
// starting background task to update product
new SaveProductDetails().execute();
}
});

// Delete button click event
btnDelete.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View arg0) {
// deleting product in background thread
new DeleteProduct().execute();
}
});

}

/**
* Background Async Task to Get complete product details
* */
class GetProductDetails extends AsyncTask<String, String, String> {

/**
* Before starting background thread Show Progress Dialog
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(EditProductActivity.this);
pDialog.setMessage(“Loading product details. Please wait…”);
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}

/**
* Getting product details in background thread
* */
protected String doInBackground(String… params) {

// updating UI from Background Thread
runOnUiThread(new Runnable() {
public void run() {
// Check for success tag
int success;
try {
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair(“pid”, pid));

// getting product details by making HTTP request
// Note that product details url will use GET request
JSONObject json = jsonParser.makeHttpRequest(
url_product_detials, “GET”, params);

// check your log for json response
Log.d(“Single Product Details”, json.toString());

// json success tag
success = json.getInt(TAG_SUCCESS);
if (success == 1) {
// successfully received product details
JSONArray productObj = json
.getJSONArray(TAG_PRODUCT); // JSON Array

// get first product object from JSON Array
JSONObject product = productObj.getJSONObject(0);

// product with this pid found
// Edit Text
txtName = (EditText) findViewById(R.id.inputName);
txtPrice = (EditText) findViewById(R.id.inputPrice);
txtDesc = (EditText) findViewById(R.id.inputDesc);

// display product data in EditText
txtName.setText(product.getString(TAG_NAME));
txtPrice.setText(product.getString(TAG_PRICE));
txtDesc.setText(product.getString(TAG_DESCRIPTION));

}else{
// product with pid not found
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});

return null;
}

/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(String file_url) {
// dismiss the dialog once got all details
pDialog.dismiss();
}
}

/**
* Background Async Task to  Save product Details
* */
class SaveProductDetails extends AsyncTask<String, String, String> {

/**
* Before starting background thread Show Progress Dialog
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(EditProductActivity.this);
pDialog.setMessage(“Saving product …”);
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}

/**
* Saving product
* */
protected String doInBackground(String… args) {

// getting updated data from EditTexts
String name = txtName.getText().toString();
String price = txtPrice.getText().toString();
String description = txtDesc.getText().toString();

// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair(TAG_PID, pid));
params.add(new BasicNameValuePair(TAG_NAME, name));
params.add(new BasicNameValuePair(TAG_PRICE, price));
params.add(new BasicNameValuePair(TAG_DESCRIPTION, description));

// sending modified data through http request
// Notice that update product url accepts POST method
JSONObject json = jsonParser.makeHttpRequest(url_update_product,
“POST”, params);

// check json success tag
try {
int success = json.getInt(TAG_SUCCESS);

if (success == 1) {
// successfully updated
Intent i = getIntent();
// send result code 100 to notify about product update
setResult(100, i);
finish();
} else {
// failed to update product
}
} catch (JSONException e) {
e.printStackTrace();
}

return null;
}

/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(String file_url) {
// dismiss the dialog once product uupdated
pDialog.dismiss();
}
}

/*****************************************************************
* Background Async Task to Delete Product
* */
class DeleteProduct extends AsyncTask<String, String, String> {

/**
* Before starting background thread Show Progress Dialog
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(EditProductActivity.this);
pDialog.setMessage(“Deleting Product…”);
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}

/**
* Deleting product
* */
protected String doInBackground(String… args) {

// Check for success tag
int success;
try {
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair(“pid”, pid));

// getting product details by making HTTP request
JSONObject json = jsonParser.makeHttpRequest(
url_delete_product, “POST”, params);

// check your log for json response
Log.d(“Delete Product”, json.toString());

// json success tag
success = json.getInt(TAG_SUCCESS);
if (success == 1) {
// product successfully deleted
// notify previous activity by sending code 100
Intent i = getIntent();
// send result code 100 to notify about product deletion
setResult(100, i);
finish();
}
} catch (JSONException e) {
e.printStackTrace();
}

return null;
}

/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(String file_url) {
// dismiss the dialog once product deleted
pDialog.dismiss();

}

}
}

Setelah semua proses selesai,  jangan lupa menambahkan kode di AndroidManifest.xml dibawah activity main screen :

<!– All Product Activity –>
<activity
android:name=”.AllProductsActivity”
android:label=”All Products” >
</activity>

<!– Add Product Activity –>
<activity
android:name=”.NewProductActivity”
android:label=”Add New Product” >
</activity>

<!– Edit Product Activity –>
<activity
android:name=”.EditProductActivity”
android:label=”Edit Product” >
</activity>
</application>

<!–  Internet Permissions –>
<uses-permission android:name=”android.permission.INTERNET” />

Ket : Setiap kali ada baris kode seperti ini =  “http://192.168.43.160/android_connect/get_product_details.php”;

Perlu digaris bawahi bahwa untuk alamat Ip yang saya tebalkan diatas wajib diubah sesuai dengan koneksi alamat Ip yang dipakai biasanya yang dirubah hanya 5 digit terakhir yang kita sesuaikan dengan Ip yang kita pakai.

Setelah itu Running atau build android di eclipse,

Demikian. Semoga sukses……..>>>

4 thoughts on “CRUD Android dengan database Mysql

  1. Psychic Readings

    I don’t even understand how I finished up here, but I thought this publish was once great.
    I don’t recognize who you’re but definitely you’re going to a well-known blogger when you
    aren’t already. Cheers!

    Reply
    1. septiyo

      kalau menggunakan Android Studio biasanya Anda harus menggunakan Bahasa Nativenya android atau dengan Kata lain Menggunakan JAVA.

      lebih baik anda menggunakan versi hybridnya, dari Web -> Android 😀

      Reply

Leave a Reply

Your email address will not be published. Required fields are marked *