Sabtu, Februari 23, 2013

Membangun Koneksi PHP MySQL dengan Android

http://rapidpurple.com/purpleblog/wp-content/uploads/2011/11/php_mysql_logo.png

Salam Developer, kali ini kita akan membahas tentang bagaimana membangun koneksi antara PHP MySQl dengan aplikasi yang kita buat di platform Android. Koneksi yang akan kita bangun ini menggunakan JSON. Untuk lebih jelasnya mengenai apa itu JSON bisa dibuka pada link berikut.

Untuk persiapan, tool tool yang kita butuhkan adalah

1. Apache Web Server dan mySQL bisa pake XAMPP download disini –> XAMPP

2. Eclipse dan Android SDK –> versi yang saya gunakan disini ada 2.3.3 Ginggerbeard

3. Notepad++ atau Dreamweaver terserah mau pake yang mana untuk edit file PHP

4. Kopi/Susu + roti bakar Open-mouthed smile --> Wajib nih meski cuman singkat tutorialnya Smile

Bagian 1 Buat Project Baru pada android

Setelah membuat project baru buat class baru bernama JSONParser.java(disini saya menggunakan package dan main class saya sendiri, so jika anda copas perhatikan hal tersebut OK).

JSONParser.java

package com.eepis.android;

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.HttpPost;
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() {

    }
   
    public JSONObject getJSONListfromURL(String url,List<NameValuePair> params){

        //initialize
        InputStream is = null;
        String result = "";
        JSONObject jArray = null;

        //http post
        try{
            DefaultHttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost(url);
            httppost.setEntity(new UrlEncodedFormEntity(params));
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            is = entity.getContent();

        }catch(Exception e){
            Log.e("log_tag", "Error in http connection "+e.toString());
        }

        //convert response to string
        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();
            result=sb.toString();
        }catch(Exception e){
            Log.e("log_tag", "Error converting result "+e.toString());
        }

        //try parse the string to a JSON object
        try{
                jArray = new JSONObject(result);
        }catch(JSONException e){
            Log.e("log_tag", "Error parsing data "+e.toString());
        }

        return jArray;
    }

    public JSONObject getJSONFromUrl(String url, List<NameValuePair> params) {

        // Making HTTP request
        try {
            // 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();

        } 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();
            Log.e("JSON", json);
        } 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;

    }
   
    public void SendJSONToURL(String url,List<NameValuePair> params){

        //http post
        try{
            DefaultHttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost(url);
            httppost.setEntity(new UrlEncodedFormEntity(params));
            httpclient.execute(httppost);

        }catch(Exception e){
            Log.e("log_tag", "Error in http connection "+e.toString());
        }
    }
}

ConnectPHPMySQLActivity.java

package com.eepis.android;

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.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class ConnectPHPMySQLActivity extends Activity implements OnClickListener{
    //Deklarasi variabel yang digunakan
    private JSONParser jsonParser;
    private static String ServerURL = "http://10.0.2.2/tes/";    //alamat lokasi file untuk menangkap/mengirim JSON
    private static String pesan_tag = "pesan";
    TextView     makanan,minuman;
    Button        lihat;
    EditText    pesan;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //Deklarasi Object di XML Layout
        makanan=(TextView)findViewById(R.id.txt1);
        minuman=(TextView)findViewById(R.id.txt2);
        lihat=(Button)findViewById(R.id.btn1);
        lihat.setOnClickListener(this);
        pesan=(EditText)findViewById(R.id.edit1);
    }
    @Override
    public void onClick(View v) {
        //Memanggil class JSONParser
        jsonParser = new JSONParser();       
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("tag", pesan_tag));
        params.add(new BasicNameValuePair("id", pesan.getText().toString()));       
        //Mengirim parameter yang akan di tangkap server
        JSONObject json = jsonParser.getJSONFromUrl(ServerURL, params);
        try {
            makanan.setText(json.getString("makanan"));
            minuman.setText(json.getString("minuman"));
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   
    }
}

main.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:padding="10dp">
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Pilihan Menu"
        android:layout_marginTop="10dp"
        android:textSize="25dp" />
    <EditText
        android:id="@+id/edit1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="Isi antara 1-5" />
    <Button
        android:id="@+id/btn1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Lihat Data"/>
    <TextView
          android:id="@+id/txt1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Makanan"
        android:layout_marginTop="10dp"
        android:textSize="25dp" />
    <TextView
           android:id="@+id/txt2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Minuman"
        android:layout_marginTop="10dp"
        android:textSize="25dp"/>
</LinearLayout>

AndroidManifest.xml

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

    <uses-sdk android:minSdkVersion="10" />

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

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

Bagian 2 Buat API yang menghandle request dari Android

Pada server side kita membuat API yang menangkap Http-Post yang kita kirim via android dan mengembalikannya ke kita dalam bentuk JSON

SQL file

CREATE TABLE IF NOT EXISTS `pesanan` (
  `id` int(2) NOT NULL AUTO_INCREMENT,
  `makanan` varchar(15) NOT NULL,
  `minuman` varchar(15) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

INSERT INTO `pesanan` (`id`, `makanan`, `minuman`) VALUES
(1, 'nasi goreng', 'milkshake'),
(2, 'nasi campur', 'es jeruk'),
(3, 'martabak', 'jus alpukat');

index.php

<?php

/**
File ini untuk menghandle API Request
hasilnya di encoda dalam bentuk JSON
  /**
* check for POST request
*/
if (isset($_POST['tag']) && $_POST['tag'] != '') {
    // Tag
    $tag = $_POST['tag'];

    // Database Handler
    require_once 'include/DB_Functions.php';
    $db = new DB_Functions();

    // Response--> data yang akan dikembalikan
    $response = array("tag" => $tag, "success" => 0);
   
    if ($tag == 'pesan') {
        $id = $_POST['id'];
        $list=$db->getData($id);
        $response = $list;
        if($list!=false)    {
            $response["success"] = 1;
            echo json_encode($response);
        }
        else{
            $response["success"] = 0;
            echo json_encode($response);
        }
    }
   
    else {
        echo "Invalid Request";
    }
} else {
    echo "Access Denied";
}
?>

config.php

<?php

/**
* Database config variables
*/
define("DB_HOST", "localhost");
define("DB_USER", "root");
define("DB_PASSWORD", "");
define("DB_DATABASE", "tes");
?>

DB_Connect.php

<?php
class DB_Connect {

    // constructor
    function __construct() {
       
    }

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

    // Connecting to database
    public function connect() {
        require_once 'include/config.php';
        // connecting to mysql
        $con = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
        // selecting database
        mysql_select_db(DB_DATABASE);

        // return database handler
        return $con;
    }

    // Closing database connection
    public function close() {
        mysql_close();
    }

}

?>

DB_Function.php

<?php

class DB_Functions {

    private $db;

    //put your code here
    // constructor
    function __construct() {
        require_once 'DB_Connect.php';
        // connecting to database
        $this->db = new DB_Connect();
        $this->db->connect();
    }

    // destructor
    function __destruct() {
       
    }
   
    public function getData($id) {
        $result=mysql_query("SELECT * FROM pesanan WHERE id='$id'");       
        $result=mysql_fetch_assoc($result);
        if ($result != null) {
            return $result;
        }
        else{
            return false;
        }
    }
}
?>

Bagian 3 Hasil running aplikasi

File JSON yang dikirim ke android berbentuk

{"id":"2","makanan":"nasi campur","minuman":"es jeruk","success":1}

Hasil tampilan pada aplikasi

image

Demikianlah tutorial kali ini semoga bisa bermanfaat buat kawan kawan sekalian. Untuk source projectnya bisa di download di alamat berikut

DOWNLOAD

Tutorial selanjutnya akan membahas tentang membuat login dengan MySQL dan PHP via Android. So Keep Update ya Open-mouthed smile

jika ada pertanyaan silahkan saja email saya di bagibagi23@gmail.com

15 komentar:

  1. mas gimana carax memparser objek gambar yang dilengkapi dengan titik koordinat untuk menampilkan sebuah map....

    BalasHapus
  2. gan, untuk file2 di dalam folder "server side" ditaruh dimana?? apakah di localhostnya atau dalam project? mhon penjelasan yang agak detail.trimz

    BalasHapus
  3. gan itu detail databasenya mana?kok ane cari2 dari kemarin gak ada?ane jadi bingung gan, sama struktur DBnya?

    BalasHapus
  4. gan, untuk file2 di dalam folder "server side" ditaruh dimana?? apakah di localhostnya atau dalam project? mhon penjelasan yang agak detail.trimz

    BalasHapus
  5. FIle indexnya saya buka kok Access Denied ya mas

    BalasHapus
  6. gan untuk server side blm paham, filenya di taro dimana...

    www.materi-it.com

    BalasHapus
  7. server side disimpan di xamp -- > mysql sebagai databasenya
    file php disimpan di xamp -- > htdocs sebagai jembatan android dengan database

    BalasHapus
  8. thank gan, ditunggu tutorial selanjutnya...

    BalasHapus
  9. gan ane minta tutor yang cara koneksi database aja lah gausah sama programnya :D

    BalasHapus
  10. thanks om,, sangat bermanfaat buat tugas ahir ane

    BalasHapus
  11. gimana cara ngambil data kalau tanpa button gan ? saya hanya menampilkan data yang dari DB ke main.xml nya saja. mohon bimbingan nya . Thanks

    BalasHapus
  12. Tutorial nya kurang jelas bro. file php nya di letakin dimana? terus ini pake emulator apa jalanin langsung di android nya? minta bantuan nya ya bro.

    BalasHapus