Tuesday, December 18, 2012

Tutorial Android PHP dan MySQL

Penulis : Agus Suharyanto,  http://agusharyanto.net/
Disimulasikan : M Yusro
—–


food5


Mungkin ada yang tidak sadar dengan Browser yang ada dilaptop kita dapat terhubung ke database MySQL yang tersimpan pada server yang jaraknya jauh dengan kita, semua itu dapat terwujud karena adanya jaringan Internet.

Laptop dengan Handset Android adalah sama, yaitu client dari suatu server, yang berarti dari handset android kita bisa mengakses file PHP yang ada diserver.

Oke untuk praktek kita kali ini kita  akan membuat daftar harga menu makanan, yang datanya diinputkan dari aplikasi android dan ditampilkan juga diaplikasi android  tersebut.

Langkah pertama adalah siapkan database beserta tablenya.
 
CREATE DATABASE db_makanan;

CREATE TABLE tbl_makanan (
id INT(4) NOT NULL AUTO_INCREMENT,
nama_makanan VARCHAR(32) NOT NULL,
harga INT(10) NOT NULL,
PRIMARY KEY (id)
)
ENGINE=MyISAM;

insert into tbl_makanan values(null,'ayam bakar',12000);
insert into tbl_makanan values(null,'ayam goreng',11000);
insert into tbl_makanan values( null,'ikan bakar',12000);




Oke karena aplikasi  android kita ini nantinya bisa memiliki fitur :
  1. Tambah data makanan
  2. Menampilkan data makanan yang telah diinputkan.
Untuk itu kita perlu membuat file PHP untuk menerima data dari android untuk dimasukkan ke dalam database, simpan dengan nama addmakanan.php
 
<?php
$nama = $_GET['nama'];
$harga = $_GET['harga'];

$link = mysql_connect('localhost', 'user', 'password') or die('Cannot connect to the DB');
mysql_select_db('db_makanan', $link) or die('Cannot select the DB');

/* grab the posts from the db */
$query = "insert into tbl_makanan (nama_makanan,harga) values('".$nama."',".$harga.")";
$result = mysql_query($query, $link) or die('Error query:  '.$query);
echo "SUCCESS";

?>

Buat juga file php untuk menampilkan daftar makanan yang telah kita inputkan, simpan dengan nama daftarmakanan.php
 
<?php
$link = mysql_connect('localhost', 'user', 'password') or die('Cannot connect to the DB');
mysql_select_db('db_makanan', $link) or die('Cannot select the DB');

/* grab the posts from the db */
$query = "SELECT nama_makanan, harga FROM tbl_makanan";
$result = mysql_query($query, $link) or die('Errorquery:  '.$query);

$rows = array();
while ($r = mysql_fetch_assoc($result)) {
    $rows[] = $r;
}
$data = "{makanan:".json_encode($rows)."}";
echo $data;
?>

Dari file di atas dapat dilihat bahwa server akan mengirimkan data ke client dalam bentuk JSON.

Untuk membuktikannya, mari kita coba dibrowser, dengan memasukkan address

http://localhost/android/daftarmakanan.php


Sekarang android time
1. Buat  Project Baru dengan nama AndroidJSON (atau terserah anda)
2. Mari kita Buat layout untuk  Tambah Data, simpan dengan nama tambah.xml
 
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical" android:layout_width="fill_parent"
 android:layout_height="fill_parent">
 <TextView android:text="Nama Makanan :" android:id="@+id/TextView01"
  android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
 <EditText android:text="" android:id="@+id/txtNama"
  android:layout_width="fill_parent" android:layout_height="wrap_content"></EditText>
 <TextView android:text="Harga :" android:id="@+id/TextView02"
  android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
 <EditText android:text="" android:id="@+id/txtHarga"
  android:layout_width="fill_parent" android:layout_height="wrap_content"></EditText>
 <Button android:text="Simpan" android:id="@+id/btnSimpan"
  android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
</LinearLayout>

3.Buat juga Layout untuk menampilkan daftar harga makanan, simpan dengan nama daftarmakanan.xml
 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical" android:layout_width="fill_parent"
 android:layout_height="fill_parent">

 <TextView android:layout_width="fill_parent"
  android:layout_height="wrap_content" android:text="Baca Data Dari server dengan JSON" />
 <TextView android:layout_width="fill_parent"
  android:layout_height="wrap_content" android:text="Daftar Makanan" />
 <TextView android:layout_width="fill_parent" android:id="@+id/TextViewResult"
  android:layout_height="wrap_content" android:text="Hasil JSON" />
</LinearLayout>

4. Sekararang Mari kita buat Menu dari aplikasi ini, yang didalamnya terdapat navigasi untuk masuk ke Form Tambah, ke Daftar Makanan dan keluar Aplikasi. Edit File MainActivity.java
 
package com.agus.android.php;

/**
 * Class InsertActivity
 * @version 1.0 Dec 18, 2011
 * @author Agus Haryanto (agus.superwriter@gmail.com)
 * @website http://agusharyanto.net
 */

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends ListActivity {
    /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle icicle) {
  super.onCreate(icicle);

  // Create an array of Strings, that will be put to our ListActivity
  String[] menu = new String[] { "Tambah Data", "Tampilkan Data", "Exit" };
  // Create an ArrayAdapter, that will actually make the Strings above
  // appear in the ListView
  // Menset nilai array ke dalam list adapater sehingga data pada array
  // akan dimunculkan dalam list
  this.setListAdapter(new ArrayAdapter<String>(this,
    android.R.layout.simple_list_item_1, menu));
 }

 @Override
 /**method ini akan mengoveride method onListItemClick
  * yang ada pada class List Activity
  * method ini akan dipanggil apabilai ada salah satu item
  * dari list menu yang dipilih
  */
 protected void onListItemClick(ListView l, View v, int position, long id) {
  super.onListItemClick(l, v, position, id);
  // Get the item that was clicked
  Object o = this.getListAdapter().getItem(position);
  String pilihan = o.toString();
  tampilkanPilihan(pilihan);
 }

 protected void tampilkanPilihan(String pilihan) {
  try {
   Intent i = null;
   if (pilihan.equals("Tambah Data")) {
    i = new Intent(this, InsertActivity.class);
   } else if (pilihan.equals("Tampilkan Data")) {
    i = new Intent(this, JSONActivity.class);
   } else if (pilihan.equals("Exit")) {
    finish();
   } else {
    Toast.makeText(this,"Anda Memilih: " + pilihan + " , " +
      "Actionnya belum dibuat", Toast.LENGTH_LONG).show();
   }
   startActivity(i);
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

5. Sekarang Bagian Form Tambah Datanya, Buat Class baru dengan nama InsertActivity.java.
 
package com.agus.android.php;

/**
 * Class InsertActivity
 * @version 1.0 Dec 18, 2011
 * @author Agus Haryanto (agus.superwriter@gmail.com)
 * @website http://agusharyanto.net
 */

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class InsertActivity extends Activity {
 private EditText txtNama;
 private EditText txtHarga;

 private Button btnSimpan;
 // Seusuaikan url dengan nama domain yang anda gunakan
 private String url = "http://10.0.2.2/android/addmakanan.php";

 /**
  * Method yang dipanggil pada saat aplikaasi dijalankan
  * */
 @Override
 public void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);
  setContentView(R.layout.tambah);
  txtNama = (EditText) findViewById(R.id.txtNama);
  txtHarga = (EditText) findViewById(R.id.txtHarga);

  btnSimpan = (Button) findViewById(R.id.btnSimpan);
  // daftarkan even onClick pada btnSimpan
  btnSimpan.setOnClickListener(new Button.OnClickListener() {
   @Override
   public void onClick(View v) {

    try {
     // setiap parameter yang akan dikirim melalui http
     // harus encode agar
     // dapat terbaca dengan baik oleh server
     String nama = URLEncoder.encode(txtNama.getText()
       .toString(), "utf-8");
     String harga = URLEncoder.encode(txtHarga.getText()
       .toString(), "utf-8");
     url += "?nama=" + nama + "&harga=" + harga;
     getRequest(url);
    } catch (UnsupportedEncodingException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }

   }
  });

 }

 /**
  * Method untuk Mengirimkan data kes erver event by button login diklik
  *
  * @param view
  */
 public void getRequest(String Url) {
  Toast.makeText(this, "Tambah Data " + Url + " ", Toast.LENGTH_SHORT)
    .show();
  HttpClient client = new DefaultHttpClient();
  HttpGet request = new HttpGet(url);
  try {
   HttpResponse response = client.execute(request);
   Toast.makeText(this, "Tambah Data " + request(response) + " ",
     Toast.LENGTH_SHORT).show();
  } catch (Exception ex) {
   Toast.makeText(this, "Tambah Data Gagal !", Toast.LENGTH_SHORT)
     .show();
  }

 }

 /**
  * Method untuk Menenrima data dari server
  *
  * @param response
  * @return
  */
 public static String request(HttpResponse response) {
  String result = "";

  try {
   InputStream in = response.getEntity().getContent();
   BufferedReader reader = new BufferedReader(
     new InputStreamReader(in));
   StringBuilder str = new StringBuilder();
   String line = null;
   while ((line = reader.readLine()) != null) {
    str.append(line + "\n");
   }
   in.close();
   result = str.toString();
  } catch (Exception ex) {
   result = "Error";
  }
  return result;
 }

}

6. Waktunya kita buat Class untuk menampilkan data dari server dalam bentuk JSON, buat class baru dengan nama JSONActivity.java
 
package com.agus.android.php;

/**
 * Class JSONActivity
 * @version 1.0 Dec 18, 2011
 * @author Agus Haryanto (agus.superwriter@gmail.com)
 * @website http://agusharyanto.net
 */

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;

public class JSONActivity extends Activity {
 private JSONObject jObject;

 private String xResult ="";
 //Seusuaikan url dengan nama domain yang anda gunakan
 private String url = "http://10.0.2.2/android/daftarmakanan.php";

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.daftarmakanan);
  TextView txtResult = (TextView)findViewById(R.id.TextViewResult);
        xResult = getRequest(url);
        try {
    parse(txtResult);
   } catch (Exception e) {
    e.printStackTrace();
   }

 }
 private void parse(TextView txtResult) throws Exception {
  jObject = new JSONObject(xResult);

  JSONArray menuitemArray = jObject.getJSONArray("makanan");
  String sret="";
  for (int i = 0; i < menuitemArray.length(); i++) {
   sret +=menuitemArray.getJSONObject(i)
   .getString("nama_makanan").toString()+" : ";
   System.out.println(menuitemArray.getJSONObject(i)
     .getString("nama_makanan").toString());
   System.out.println(menuitemArray.getJSONObject(i).getString(
     "harga").toString());
   sret +=menuitemArray.getJSONObject(i).getString(
   "harga").toString()+"\n";
  }
  txtResult.setText(sret);
 }

 /**
  * Method untuk Mengirimkan data kes erver
  * event by button login diklik
  *
  * @param view
  */
 public String getRequest(String Url){

       String sret="";
        HttpClient client = new DefaultHttpClient();
        HttpGet request = new HttpGet(Url);
        try{
          HttpResponse response = client.execute(request);
          sret =request(response);

        }catch(Exception ex){
         Toast.makeText(this,"Gagal "+sret, Toast.LENGTH_SHORT).show();
        }
        return sret;

    }
 /**
  * Method untuk Menenrima data dari server
  * @param response
  * @return
  */
 public static String request(HttpResponse response){
        String result = "";
        try{
            InputStream in = response.getEntity().getContent();
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
            StringBuilder str = new StringBuilder();
            String line = null;
            while((line = reader.readLine()) != null){
                str.append(line + "\n");
            }
            in.close();
            result = str.toString();
        }catch(Exception ex){
            result = "Error";
        }
        return result;
    }

 }
 
7. Edit file AndroidMainifest.xml
 
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.agus.android.php"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".MainActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity android:name=".InsertActivity" android:label="Tambah Data">
        </activity>
         <activity android:name="JSONActivity" android:label="Daftar Makanan">
        </activity>

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

8. Semua pekerjaan koding sudah kita lakukan sekarang saatnya Running Time
Artikel Terkait

0 comments: