0% found this document useful (0 votes)
255 views

How To Connect Android With PHP, MySQL

This document provides code examples for connecting an Android application to a MySQL database using PHP. It includes PHP files for creating a database connection class, inserting, retrieving, updating and deleting data from a products table. The PHP files return JSON responses which can be parsed by the Android application.

Uploaded by

Maxus Lord
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
255 views

How To Connect Android With PHP, MySQL

This document provides code examples for connecting an Android application to a MySQL database using PHP. It includes PHP files for creating a database connection class, inserting, retrieving, updating and deleting data from a products table. The PHP files return JSON responses which can be parsed by the Android application.

Uploaded by

Maxus Lord
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 48

How to connect Android with PHP, MySQL

1 de 48

Like

1.4k

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

Tweet

119

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

2 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

3 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

4 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

<?php
echo "Welcome, I am connecting Android to PHP, MySQL";
?>

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

5 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

CREATE DATABASE androidhive;


CREATE TABLE products(
pid int(11) primary key auto_increment,
name varchar(100) not null,
price decimal(10,2) not null,
description text,

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

6 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

7 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

/*
* All database connection variables
*/
define('DB_USER', "root"); // db user
define('DB_PASSWORD', ""); // db password (mention your db password here)
define('DB_DATABASE', "androidhive"); // database name
define('DB_SERVER', "localhost"); // db server
?>

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;

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

8 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

// closing db connection
mysql_close();

}
?>

$db = new DB_CONNECT(); // creating class object(will open database connection)

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

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

9 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

$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'
// 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);

"success": 0,
"message": "Required field(s) is missing"

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

10 de 48

{
}

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

"success": 1,
"message": "Product successfully created."

"success": 0,
"message": "Oops! An error occurred."

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

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

11 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

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

"success": 1,
"product": [
30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

12 de 48

{
}

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

"created_at": "2012-04-29 01:41:42",


"updated_at": "0000-00-00 00:00:00"

"success": 0,
"message": "No product found"

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

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

13 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

$product["name"] = $row["name"];
$product["price"] = $row["price"];
$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);

"products": [
{
"pid": "1",
"name": "iPhone 4S",
"price": "300.00",
"created_at": "2012-04-29
"updated_at": "0000-00-00
},
{
"pid": "2",
"name": "Macbook Pro",
"price": "600.00",
"created_at": "2012-04-29
"updated_at": "0000-00-00
},
{
"pid": "3",
"name": "Macbook Air",
"price": "800.00",
"created_at": "2012-04-29
"updated_at": "0000-00-00

02:04:02",
00:00:00"

02:04:51",
00:00:00"

02:05:57",
00:00:00"
30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

14 de 48

{
}

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

"created_at": "2012-04-29 02:07:14",


"updated_at": "0000-00-00 00:00:00"

],
"success": 1

"success": 0,
"message": "No products found"

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

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

15 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

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

"success": 1,
"message": "Product successfully updated."

delete_product.php
<?php
/*
* Following code will delete a product from table
* A product is identified by product id (pid)
*/
// array for JSON response

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

16 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

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

"success": 1,
"message": "Product successfully deleted"

"success": 0,

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

17 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.androidhive"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<application
android:configChanges="keyboardHidden|orientation"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".MainScreenActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- All Product Activity -->
<activity
android:name=".AllProductsActivity"
android:label="All Products" >
</activity>
<!-- Add Product Activity -->

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

18 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

<!-- Edit Product Activity -->


<activity
android:name=".EditProductActivity"
android:label="Edit Product" >
</activity>
</application>
<!-- Internet Permissions -->
<uses-permission android:name="android.permission.INTERNET" />
</manifest>

main_screen.xml
<?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 to view all products screen -->
<Button android:id="@+id/btnViewProducts"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="View Products"
android:layout_marginTop="25dip"/>
<!-- Button to create a new product screen -->
<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>

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

19 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

20 de 48

import
import
import
import
import

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

android.app.Activity;
android.content.Intent;
android.os.Bundle;
android.view.View;
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.
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.
startActivity(i);

});

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

21 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

all_products.xml
<?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>

list_item.xml
<?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"
30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

22 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

AllProductsActivity.java
package com.example.androidhive;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import
import
import
import

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

import
import
import
import
import
import
import
import
import
import
import
import
import

android.app.ListActivity;
android.app.ProgressDialog;
android.content.Intent;
android.os.AsyncTask;
android.os.Bundle;
android.util.Log;
android.view.View;
android.widget.AdapterView;
android.widget.AdapterView.OnItemClickListener;
android.widget.ListAdapter;
android.widget.ListView;
android.widget.SimpleAdapter;
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://api.androidhive.info/android_connec
// JSON Node names

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

23 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

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

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

24 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

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

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

25 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

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

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

26 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

27 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

add_product.xml
<?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"
30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

28 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

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

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

29 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

30 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

NewProductActivity.java
package com.example.androidhive;
import java.util.ArrayList;
import java.util.List;
import
import
import
import

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

import
import
import
import
import
import
import
import
import

android.app.Activity;
android.app.ProgressDialog;
android.content.Intent;
android.os.AsyncTask;
android.os.Bundle;
android.util.Log;
android.view.View;
android.widget.Button;
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://api.androidhive.info/android_conn
// 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);

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

31 de 48

});

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

// 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) {

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

32 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

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

edit_product.xml
<?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"

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

33 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

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

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

34 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

android:text="Delete"
android:layout_weight="1"/>
</LinearLayout>
</LinearLayout>

EditProductActivity.java
package com.example.androidhive;
import java.util.ArrayList;
import java.util.List;
import
import
import
import
import

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

import
import
import
import
import
import
import
import
import

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

public class EditProductActivity extends Activity {


EditText
EditText
EditText
EditText

txtName;
txtPrice;
txtDesc;
txtCreatedAt;
30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

35 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

// Progress Dialog
private ProgressDialog pDialog;
// JSON parser class
JSONParser jsonParser = new JSONParser();

// single product url


private static final String url_product_detials = "http://api.androidhive.info/andro

// url to update product


private static final String url_update_product = "http://api.androidhive.info/androi

// url to delete product


private static final String url_delete_product = "http://api.androidhive.info/androi
// JSON
private
private
private
private
private
private

Node names
static final
static final
static final
static final
static final
static final

String
String
String
String
String
String

TAG_SUCCESS = "success";
TAG_PRODUCT = "product";
TAG_PID = "pid";
TAG_NAME = "name";
TAG_PRICE = "price";
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();
}

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

36 de 48

});

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

// 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) {

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

37 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

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

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

38 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

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

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

39 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

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

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

40 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

41 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

42 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

package com.example.androidhive;
import
import
import
import
import
import

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

import
import
import
import
import
import
import
import
import
import
import

org.apache.http.HttpEntity;
org.apache.http.HttpResponse;
org.apache.http.NameValuePair;
org.apache.http.client.ClientProtocolException;
org.apache.http.client.entity.UrlEncodedFormEntity;
org.apache.http.client.methods.HttpGet;
org.apache.http.client.methods.HttpPost;
org.apache.http.client.utils.URLEncodedUtils;
org.apache.http.impl.client.DefaultHttpClient;
org.json.JSONException;
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);
30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

43 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

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

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

44 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

Follow @RaviTamada

2,616 followers

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

45 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

AndroidHive
Like

16,427 people like AndroidHive.

Facebook social plugin

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

46 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

.
30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

47 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

30/03/2014 09:00 p. m.

How to connect Android with PHP, MySQL

48 de 48

http://www.androidhive.info/2012/05/how-to-connect-android-with-php...

30/03/2014 09:00 p. m.

You might also like