Apr
18
2011

Komunikasi J2ME dengan PHP

Beberapa waktu lalu, ada pembaca pinter.in yang menanyakan masalah bagaimana membuat aplikasi J2Me yang dapat berkomunikasi dengan PHP. Pembaca tersebut meminta kepada kami untuk memberikan contoh kasus “Login”. Disini aplikasi J2ME yang dibuat akan menampilkan form login dan melakukan verifikasi data (Baca : username dan password) dengan data yang disimpan di server.

Pada tutorial ini tidak lagi membahas bagaimana membuat form login dengan J2ME. Hal ini sudah dibahas pada tutorial : Class TextField(J2ME)

Pembahasan pada tutorial ini lebih ditujukan bagaimana membuat hal. php yang akan kita gunakan untuk menerima parameter username dan password dengan metode GET maupun POST yang dikirimkan oleh aplikasi J2ME serta menunjukkan beberapa modifikasi yang perlu dilakukan pada tutorial Class TextField(J2ME) sehingga aplikasi J2ME mampu mengirimkan data username dan password dengan metode GET maupun POST pada URL atau alamat server yang tersedia. Pada tutorial ini, alamat server yang disediakan adalah http://latihan.pinter.in/login.php.

Berikut ini adalah gambar yang menunjukkan komunikasi antara aplikasi J2ME dengan Server.

[APLIKASI J2ME]

Dari gambar diatas bisa terlihat bahwa aplikasi J2ME akan mengirimkan data username dan password dengan metode POST atau GET. Agar aplikasi J2ME yang kita buat memiliki kemampuan untuk mengirimkan data username dan password dengan metode POST atau GET, maka kita memerlukan sebuah kelas yang memiliki method untuk mengirimkan  data tersebut. Berikut adalah source code dari kelas java yang bernama ConnectServer.java:

import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import javax.microedition.lcdui.Form;

/**
 *
 * @author admin
 */
public class ConnectServer {

 private String URL;
 private Form form;

 public ConnectServer(String URL) {
    this.URL = URL;
 }

 public byte[] loadHttpFileGET(String user,String pass) throws IOException {
    byte[] byteBuffer;

    HttpConnection hc = (HttpConnection) Connector.open(this.URL+"/?username="+user+"&password="+pass);
    try {
       hc.setRequestMethod(HttpConnection.GET);
       InputStream is = hc.openInputStream();
          try {
             int len = (int) hc.getLength();
             if (len > 0) {
                 byteBuffer = new byte[len];
                 DataInputStream dis = new DataInputStream(is);
                 dis.readFully(byteBuffer);
             } else {
                 ByteArrayOutputStream bos = new ByteArrayOutputStream();
                 byte[] buffer = new byte[512];
                 int count;
                 while ((count = is.read(buffer)) >= 0) {
                 bos.write(buffer, 0, count);
            }

            byteBuffer = bos.toByteArray();
         }
    } finally {
      is.close();
    }
 } finally {
 hc.close();
 }

 return byteBuffer;
 }

 public byte[] loadHttpFilePOST(String user, String password) throws IOException {
    byte[] byteBuffer;

    HttpConnection hc = (HttpConnection) Connector.open(this.URL);
    try {
        hc.setRequestMethod(HttpConnection.POST);
        OutputStream os = hc.openOutputStream();
        String userName = "username=" + user;
        String passWord = "&password=" + password;
        os.write(userName.getBytes());
        os.write(passWord.getBytes());
        InputStream is = hc.openInputStream();

        try {
            int len = (int) hc.getLength();
            if (len > 0) {
                byteBuffer = new byte[len];
                DataInputStream dis = new DataInputStream(is);
                dis.readFully(byteBuffer);
            } else {
                ByteArrayOutputStream bos = new ByteArrayOutputStream();
                byte[] buffer = new byte[512];
                int count;
                while ((count = is.read(buffer)) >= 0) {
                     bos.write(buffer, 0, count);
                }
                byteBuffer = bos.toByteArray();
           }
        } finally {
          is.close();
        }
    } finally {
 hc.close();
 }

 return byteBuffer;
 }
}

Dari source code diatas, baris 26 & 59 :

HttpConnection hc = (HttpConnection) Connector.open(this.URL);

adalah cara J2ME untuk mengeksekusi sebuah URL. Setelah itu, kita perlu memberitahukan apakah URL tersebut akan dibuka dan memiliki parameter yang dikirim dengan metode GET atau POST. Cara mementukan metode pengiriman parameter ini, bisa kita lihat pada baris 28 & 61 :

hc.setRequestMethod(HttpConnection.GET);” atau “hc.setRequestMethod(HttpConnection.POST);

Setelah kelas ConnectServer.java dibuat,yang kita perlukan adalah memodifikasi source code yang ada pada tutorial : Class TextField(J2ME) . Pada bagian deklarasi variable, tambahkan varialbel berikut :

private ConnectServer connect;

Sehingga source code -nya menjadi seperti berikut ini :


private Display display;
 private Form form;
 private TextField user, password;
 private StringItem login;
 private ConnectServer connect;

Lalu ubahlah method midlet yang ada pada tutorial Class TextField(J2ME) . Menjadi seperti berikut :


public Midlet()
{
   connect = new ConnectServer("http://latihan.pinter.in/login.php");
   init();
}

Lalu ubahlah method CommandAction, menjadi seperti berikut :


public void commandAction(Command c, Item item) {
   if(item == login)
   {
      new Thread(this).start();
   }
}

Yang terakhir adalah memodifikasi method run hingga menjadi sebagai berikut :

public void run() {
        String hasil = null;
        String userName = user.getString();
        String passWord = password.getString();
        try {
            hasil = new String(connect.loadHttpFileGET(userName,passWord));
            Alert alarm = new Alert("LOGIN");
            alarm.setTimeout(Alert.FOREVER);
            alarm.setString(hasil);
            display.setCurrent(alarm);
        } catch (IOException ex) {
            Alert alarm = new Alert("LOGIN");
            alarm.setTimeout(Alert.FOREVER);
            alarm.setString(hasil);
            display.setCurrent(alarm);
        }

    }

Berikut ini adalah source code lengkap dari aplikasi J2ME :

import java.io.IOException;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Item;
import javax.microedition.lcdui.ItemCommandListener;
import javax.microedition.lcdui.List;
import javax.microedition.lcdui.StringItem;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.*;

/**
 * @author husni
 */
public class Midlet extends MIDlet implements ItemCommandListener,Runnable{
    private Display display;
    private Form form;
    private TextField user, password;
    private StringItem login;
    private ConnectServer connect;
    public Midlet()
    {
       connect = new ConnectServer("http://latihan.pinter.in/login.php");
       init();
    }
    public void startApp() {
        showUI();
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }

    public void init()
    {
        display = Display.getDisplay(this);
        form = new Form("LOGIN");
        user = new TextField("USERNAME", null, 160, TextField.ANY);
        password = new TextField("PASSWORD", null, 160, TextField.PASSWORD);
        login = new StringItem(null, "LOGIN", Item.BUTTON);
    }
    public void showUI()
    {
        user.setLayout(Item.LAYOUT_2|Item.LAYOUT_CENTER|Item.LAYOUT_NEWLINE_AFTER);//set layout
        form.append(user);
        password.setLayout(Item.LAYOUT_2|Item.LAYOUT_CENTER|Item.LAYOUT_NEWLINE_AFTER);
        form.append(password);
        login.setLayout(Item.LAYOUT_2|Item.LAYOUT_CENTER|Item.LAYOUT_NEWLINE_AFTER);
        login.setDefaultCommand(List.SELECT_COMMAND);
        login.setItemCommandListener(this); //set listener pada saat login
        form.append(login);
        display.setCurrent(form); //tampilkan form
    }

    public void commandAction(Command c, Item item) {
        if(item == login)
        {
            new Thread(this).start();
        }
    }

    public void run() {
        String hasil = null;
        String userName = user.getString();
        String passWord = password.getString();
        try {
            hasil = new String(connect.loadHttpFileGET(userName,passWord));
            Alert alarm = new Alert("LOGIN");
            alarm.setTimeout(Alert.FOREVER);
            alarm.setString(hasil);
            display.setCurrent(alarm);
        } catch (IOException ex) {
            Alert alarm = new Alert("LOGIN");
            alarm.setTimeout(Alert.FOREVER);
            alarm.setString(hasil);
            display.setCurrent(alarm);
        }

    }
}

[APLIKASI WEB : login.php] pada SERVER

Pada bagian server, diperlukan sebuah halaman web yang akan menerima parameter username dan password yang dikirimkan oleh aplikasi J2ME serta melakukan verifikasi pada database. Pada tutorial ini, halaman web pada server dibuat menggunakan bahasa pemrograman PHP. Berikut adalah source code lengkap dari halaman login.php :


<?php
 $user = "nama_user";
 $pass = "password_user";
 $host = "localhost";
 $db = "nama database";

 $conn = mysql_connect($host,$user,$pass);
 mysql_select_db($db);
 if(!$conn){echo"Gagal Koneksi ke Database";}

$flag = false;

if($_GET['username'] != "" and $_GET['password'] != "")
{
 $username = $_GET['username'];
 $password = $_GET['password'];
 $flag = true;
}
elseif($_POST['username'] != "" and $_POST['password'] != "")
{
 $username = $_POST['username'];
 $password = $_POST['password'];
 $flag = true;
}
else
{
 echo"username dan password harus diisi";
}

if($flag == true)
{
 $sql = "SELECT * FROM account WHERE username = '".$username."' AND password = '".$password."'";
 $hasil = mysql_query($sql);
 $jmlacc = mysql_num_rows($hasil);

 if($jmlacc > 0)
 {
 echo"valid";
 }else{
 echo"invalid";
 }
}
?>

Halaman PHP ini akan memproses parameter username dan password yang dikirim serta memberikan nilai balik berupa string “valid” jika username dan password ditemukan pada database, dan string “invalid” jika username dan password tidak ditemukan pada database.

Untuk mencoba gunakan

username : joko dengan password : passwordjoko

atau

username : anton dengan password : passwordanton

Selamat Mencoba !!

Source Code

Related Posts

About the Author: tupic na

Iseng-iseng nulis aja.. nggak sengaja belajar PHP, JAVA dan .NET

  • isayuti

    Untuk yang metode POST gak jalan pak.

    • Admin Pinter

      Mohon info lebih lanjut mengenai apa yang tidak bisa jalannya…

  • jakfar

    Menarik sekali dan bermanfaat postingannya. Saya mau tanya soal lain ,yaitu cara operasi penambahan dan pengurangan klas date.

    Terimakasih

  • http://blog.husein.co.cc/ ox69xo

    menarik,

    oia bang Admin, ada sedikit pertanyaan sederhana dari saya nih:

    1. klo udh berkaitan dengan php, berarti mysql bisa dimanfaatkan oleh j2me jg dong? tentunya dengan bantuan php itu sendiri.

    2. saya pernah baca ttg MIDP dan CLDC,untuk script di postingan ini apakah bisa digunakan pada MIDP versi 2.0 dan CLDC versi 1.0?

    ditunggu jawabannya band Admin, ^^

    • Admin Pinter

      iya betul sekali, untuk postingan ini bisa dijalankan di MIDP 2.0 CLDC 1.0

  • helio

    saya mau tanya:

    1. Skrip
    {
    new Thread(this).start();
    }
    }

    saya run di netbead, selalu error. kenapa ya?

    2. tempat penyimpanan login.php pada server, diletakan di mana?

    thx :)

    • pinterin admin

      oh mohon maaf untuk script login belum bisa diakses, karena kemarin kita perbaikan server,

      sekarang anda bisa mengakses server dengan user: joko dan password: passwordjoko

      semoga membantu

  • Anonymous

    mohon maaf, untuk akses POST pada j2me sempat tidak berjalan dan saya baru menyadari hari ini, sekarang untuk POST dan GET sdh berjalan dengan baik :D

    dan sekarang telah saya sediakan link download source code nya

  • inibudi

    saya mencoba mengedit di PHPnya echo”valid”; dengan redirect header ke halaman yang sudah ditentukan, tapi kenapa yang muncul tetap hanya script asli pada alertya saja?? mohon pencerahannya pak

Kumpulan Orang Pinter

Ngitung Pengunjung

free counters