Kamis, 20 Desember 2012

Persistence - Record Management System

Edit Posted by with No comments
Persistence merupakan sebuah API dari MIDP yang dapat menyimpan data dari aplikasi didalam local device. Data akan di simpan pada non-volatile memori di dalam device.
Record Management System adalah sebuah database system yang berorientasi record bagi MIDP device.
Record Store adalah sebuah koleksi dai record-record dimana Record Id di dalam Record Store selalu uniqe. Pada saat sebuah record dihapus, record id-nya tidak bisa digunakan kembali.

Yuk kita lihat contoh dari persistence :












Bagaimana source code nya? yuk lihat dan coba bareng-bareng :)

package ListMenu; 

import javax.microedition.lcdui.*;
import javax.microedition.rms.*;
import javax.microedition.midlet.*;

import java.io.*;

public class ListMenu extends MIDlet implements CommandListener{
    private Display display;
    private List list;
    private Command cmdKeluar;
    private Command cmdKembali, cmdHasil, cmdbalik, cmdSimpan;
    private TextField soal1, soal2, soal3, soal4, soal5, id;
    private Form form;
    int nilai1, nilai2, nilai3, nilai4, nilai5;
    int Nakhir;
    private RecordStore rs;
    private RecordEnumeration re;
    private Alert alert;

    public ListMenu() {
        form = new Form("Menu Utama");
        cmdKeluar = new Command("Keluar", Command.EXIT, 0);
        cmdKembali = new Command("Kembali", Command.BACK, 1);
        cmdbalik = new Command("Kembali", Command.BACK, 1);
        cmdHasil = new Command("Hasil", Command.OK, 2);
        cmdSimpan = new Command("Simpan", Command.OK, 2);
        alert = new Alert(null);
        alert.setTimeout(Alert.FOREVER);

        list = new List(null, Choice.IMPLICIT);

        rs = null;
        // membuat atau membuka record store
        try
        {
            rs = RecordStore.openRecordStore("db_KodeBar", true);
        }
        catch (RecordStoreException RSE) //check kalau error = exception
        {
            alert.setString("Record store tidak dapat dibuka. " +"Aplikasi akan dihetikan");
            alert.setType(AlertType.ERROR);
            display.setCurrent(alert, null);
            System.exit(1);
        }
    }

    public void startApp() {
        display = Display.getDisplay(this);
        display.setCurrent(form);
        menuList();
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
        notifyDestroyed();
    }

    public void menuList(){
        list = new List("Menu Utama", List.IMPLICIT);
        list.append("Latihan Berhitung", null);
        list.append("Skor", null);
        list.append("Keluar", null);
        list.setCommandListener(this);
        display.setCurrent(list);
    }

    public void UJIAN(){
        form = new Form("Latihan Berhitung");
        soal1 = new TextField("1. 2+3 = ?", "", 100, TextField.DECIMAL);
        soal2 = new TextField("2. 8/2 = ?", "", 100, TextField.DECIMAL);
        soal3 = new TextField("3. 3*4 = ?", "", 100, TextField.DECIMAL);
        soal4 = new TextField("4. 7-3 = ?", "", 100, TextField.DECIMAL);
        soal5 = new TextField("5. (7-3)*2 = ?", "", 100, TextField.DECIMAL);
        form.append(soal1);
        form.append(soal2);
        form.append(soal3);
        form.append(soal4);
        form.append(soal5);
        form.setCommandListener(this);
        form.addCommand(cmdKembali);
        form.addCommand(cmdHasil);
        display.setCurrent(form);
    }
  

    public void nama(){
        form = new Form("SIMPAN HASIL");
        id = new TextField("Masukkan nama anda : ","", 100, TextField.ANY);
        form.append(id);
        form.setCommandListener(this);
        form.addCommand(cmdSimpan);
        form.addCommand(cmdbalik);
        display.setCurrent(form);
    }

  
    public void commandAction(Command c, Displayable d) {
       if (c == cmdKeluar){
           destroyApp(true);
       }
       if(c.getLabel()=="Simpan"){
           alert.setType(AlertType.INFO);
           if (!id.equals(null)) //cek jika var ada isi nya
           {
               tambahRecord(id.getString());
               alert.setString("Data lengkap !, Data sudah disimpan di RMS, untuk melihat gunakan pilihan menu'nilai tertinggi' pada menu utama");
               display.setCurrent(alert);
               display.setCurrent(alert, list);        
               }
           else //jika data kosong
           {
               alert.setString("Data Kurang !, isikan nama anda terlebih dahulu.");
               display.setCurrent(alert, form); 
           }
       }
       if(c.getLabel()=="Nilai Tertinggi"){
       lihatRecord();
       }
       else if (c == cmdHasil){
               nama();
       }
       else if (c == cmdbalik){
           UJIAN();
       }else if (c == cmdKembali){
          menuList();
       }else{
           List menu = (List) display.getCurrent();
           switch (menu.getSelectedIndex()){
               case 0:
                   UJIAN();
                   break;
               case 1:
                   lihatRecord();
                   break;
               case 2:
                   destroyApp(true);
           }
       }
    }

public void tambahRecord(String id)
{
    int a = Integer.parseInt(soal1.getString());
    int b = Integer.parseInt(soal2.getString());
    int c = Integer.parseInt(soal3.getString());
    int d = Integer.parseInt(soal4.getString());
    int e = Integer.parseInt(soal5.getString());
    if(a == 5){
        a=2;
    }
    else if(a != 5){
        a=0;
    }
    if(b==4){
        b=2;
    }
    else if(b != 4){
        b=0;
    }
    if(c==12){
        c=2;
    }
    else if(c != 12){
        c=0;
    }
    if(d==5){
        d=2;
    }
    else if(d !=2 ){
        d=0;
    }
    if(e==10){
        e=2;
    }
    else if(e != 10){
        e=0;
    }
  
  
    Nakhir = a + b + c + d + e;
  byte[] temp = null;
  try
  {
      //kosntruktor baos dan dos
      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      DataOutputStream dos = new DataOutputStream(baos);
      //cari fungsi ini ByteArrayOutputStream dan DataOutputStream di internet

      dos.writeUTF(id);// tulis var pada dos
      dos.writeInt(Nakhir);
      temp = baos.toByteArray();
  }
  catch (IOException ioe)
  {
      ioe.printStackTrace();
  }
  try
  {
      rs.addRecord(temp, 0, temp.length); //masukan data pada RecordStore
  } catch (RecordStoreNotOpenException rsnoe) {
    rsnoe.printStackTrace();
  } catch (RecordStoreException rse) {
    rse.printStackTrace();
  }
}
public void lihatRecord() {
    byte[] temp = null;
    list.setTitle("Nilai Tertinggi");
    list.deleteAll();
  
    try
    {
        re = rs.enumerateRecords(null, null, false); //enumerasi record
        while (re.hasNextElement()) //jk elemen rs lbh dr satu
        {
            int i = re.nextRecordId();
            temp = rs.getRecord(i);
            ByteArrayInputStream bais = new ByteArrayInputStream(temp);
            DataInputStream dis = new DataInputStream(bais);

            try
            {
                String id = dis.readUTF();
                //Integer Nakhir = dis.readUTF();
                list.append(id + " = "+ Nakhir +" \n",null);// tampilkan
            }
            catch (IOException ioe) {ioe.printStackTrace();}
      }
      list.addCommand(cmdKembali);
      list.setCommandListener(this);
      display.setCurrent(list);
    }
    catch (InvalidRecordIDException invID) {invID.printStackTrace();}
    catch (RecordStoreNotOpenException rsnoe) {rsnoe.printStackTrace();}
    catch (RecordStoreException rse) {rse.printStackTrace();}

  }
}



Kamis, 29 November 2012

GameCanvas , Thread dan Sprite

Edit Posted by with 1 comment
Pengertian GameCanvas
GameCanvas adalah sebuah class yang terdapat pada package javax.microedition.lcdui.game.*  yang merupakan turunan dari Canvas. GameCanvas memiliki fitur2 tambahan yang lebih fokus ke game. seperti : bisa menangkap keystates (tombol yang dipencet), dan off-screen buffering.
GC adalah sebuah kanvas yang akan kita gambar, baik string, images, sprite, atau shape dasar (kotak, lingkaran, dll).
karena GC digambar perframe (tergantung FPS), setiap proses penggambaran, dilakukan di kanvas yang sama. Karena itu, misalnya kita menggambar kotak di posisi 10,10 dan bergerak ke posisi 100,100 dengan pertambahan x dan y tiap framenya.
ClassGameCanvas menyediakan fungsi-fungsi penting dalam menangani interface game. Merupakan turunan dari Class Canvas (commands, input events, etc.), dengan penambahan fitur antara lain kemampuan game yang spesifik seperti: off-screen graphic buffer dan kemampuan untuk mengetahui status key-key input dari key-key pada HP. Kelas GameCanvas pada MIDP 2.0 telah mengusung fitur-fitur penting yang mengatasi masalah yang ada pada MIDP 1.0.
 Perbedaan antara Canvas dan GameCanvas :
Untuk menggunakan Canvas, buat subclass-nya, definisikan method paint().
Di dalam method paint(), gunakan Graphics untuk merender gambar pda screen
Ketika ingin mengubah sesuatu dan mengupdate-nya pada screen, maka harus memanggil method repaint(), kemudian system memanggil paint() sekali lagi untuk penggambaran.

Pengertian Thread
Thread memungkinkan sebuah aplikasi java untuk melakukan banyak aktivitas/operasi secara simultan (serentak)
Thread adalah unit fundamental dari eksekusi program. Setiap aplikasi minimal memiliki sebuah thread untuk menjalankan kode.
Aplikasi yang memiliki dua thread atau lebih, biasa disebut dengan multithread application

Istilah dalam thread :
Running, saat thread sedang menjalankan kode (live thread).
Ready, saat thread siap untuk mengeksekusi kode (live thread).
Suspended, saat thread sedang menunggu external event (live thread).
Terminated, saat  thread selesai mengeksekusi kode (dead thread)/

Menggunakan Class Counter

Thread - Lab Activity




Pengertian Sprite
Sprite adalah istilah yang sering muncul untuk mengolahan grafis animasi pada sebuah game. Sebagian besar objek pada sebuah game dikategorikan sebagai grafis khusus yang disebut sprites. Sprite dapat berupa karakter utama.
Frame dapat dibuat secara terurut ataupun tidak terurut, namun pada umumnya sprite ditampilkan secara terurut untuk memudahkan pengkodean.
Sprite-Lab Activity


 

Kamis, 01 November 2012

Record Management System - Mobile Computing

Edit Posted by with No comments
Record Management System adalah sebuah database system yang berorietasi record bagi MIDP device dengan menggunakan DataInputSystem, DataOutputStream, ByteArrayInputStream dan ByteArrayOutputStream untuk mendapatkan dan menyimpan sebagai tipe data dari record stores.
MIDP spesification membutuhkan minimal 8kB yang telah dipesan sebagai persistence storage. Sebuah MIDlet yang menggunakan RMS akan menspesifikasikan beberapa byte yang dibutuhkan, ukuran ini ditentukan dalam JAR manifest dan application descriptor (JAD) menggunakan MIDlet-Data-Size.
Contoh penggunaan Record Management System dengan menggunakan software Netbeans:








Source Code nya adalah :
import javax.microedition.lcdui.*;
import javax.microedition.io.*;
import javax.microedition.rms.*;
import javax.microedition.midlet.*;

import java.io.*;

public class RMSTugas extends MIDlet implements CommandListener{
    private Display display;
    private List list;
    private Command cmdKeluar;
    private Command cmdKembali, cmdHasil, cmdbalik, cmdSimpan;
    private TextField soal1, soal2, soal3, soal4, soal5, id;
    private Form form;
    int nilai1, nilai2, nilai3, nilai4, nilai5;
    int Nakhir;
    private RecordStore rs;
    private RecordEnumeration re;
    private Alert alert;

    public RMSTugas() {
        form = new Form("MENU UTAMA");
        cmdKeluar = new Command("Keluar", Command.EXIT, 0);
        cmdKembali = new Command("Kembali", Command.BACK, 1);
        cmdbalik = new Command("Kembali", Command.BACK, 1);
        cmdHasil = new Command("Hasil", Command.OK, 2);
        cmdSimpan = new Command("Simpan", Command.OK, 2);
        alert = new Alert(null);
        alert.setTimeout(Alert.FOREVER);

        list = new List(null, Choice.IMPLICIT);

        rs = null;
        // membuat atau membuka record store
        try
        {
            rs = RecordStore.openRecordStore("db_KodeBar", true);
        }
        catch (RecordStoreException rse) //check kalau error = exception
        {
            alert.setString("Record store tidak dapat dibuka. " +"Aplikasi akan dihetikan");
            alert.setType(AlertType.ERROR);
            display.setCurrent(alert, null);
            System.exit(1);
        }
    }

    public void startApp() {
        display = Display.getDisplay(this);
        display.setCurrent(form);
        menuList();
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
        notifyDestroyed();
    }

    public void menuList(){
        list = new List("MENU UTAMA", List.IMPLICIT);
        list.append("UJIAN", null);
        list.append("Nilai Tertinggi", null);
        list.append("Keluar", null);
        list.setCommandListener(this);
        display.setCurrent(list);
    }

    public void UJIAN(){
        form = new Form("UJIAN");
        soal1 = new TextField("1. 2+3 = ?", "", 100, TextField.DECIMAL);
        soal2 = new TextField("2. 8/2 = ?", "", 100, TextField.DECIMAL);
        soal3 = new TextField("3. 3*4 = ?", "", 100, TextField.DECIMAL);
        soal4 = new TextField("4. 7-3 = ?", "", 100, TextField.DECIMAL);
        soal5 = new TextField("5. (7-3)*2 = ?", "", 100, TextField.DECIMAL);
        form.append(soal1);
        form.append(soal2);
        form.append(soal3);
        form.append(soal4);
        form.append(soal5);
        form.setCommandListener(this);
        form.addCommand(cmdKembali);
        form.addCommand(cmdHasil);
        display.setCurrent(form);
    }
 

    public void nama(){
        form = new Form("SIMPAN HASIL");
        id = new TextField("Masukkan nama anda : ","", 100, TextField.ANY);
        form.append(id);
        form.setCommandListener(this);
        form.addCommand(cmdSimpan);
        form.addCommand(cmdbalik);
        display.setCurrent(form);
    }

 
    public void commandAction(Command c, Displayable d) {
       if (c == cmdKeluar){
           destroyApp(true);
       }
       if(c.getLabel()=="Simpan"){
           alert.setType(AlertType.INFO);
           if (!id.equals(null)) //cek jika var ada isi nya
           {
               tambahRecord(id.getString());
               alert.setString("Data lengkap !, Data sudah disimpan di RMS, untuk melihat gunakan pilihan menu'nilai tertinggi' pada menu utama");
               display.setCurrent(alert);
               display.setCurrent(alert, list);       
               }
           else //jika data kosong
           {
               alert.setString("Data Kurang !, isikan nama anda terlebih dahulu.");
               display.setCurrent(alert, form);
           }
       }
       if(c.getLabel()=="Nilai Tertinggi"){
       lihatRecord();
       }
       else if (c == cmdHasil){
               nama();
       }
       else if (c == cmdbalik){
           UJIAN();
       }else if (c == cmdKembali){
          menuList();
       }else{
           List menu = (List) display.getCurrent();
           switch (menu.getSelectedIndex()){
               case 0:
                   UJIAN();
                   break;
               case 1:
                   lihatRecord();
                   break;
               case 2:
                   destroyApp(true);
           }
       }
    }

public void tambahRecord(String id)
{
    int a = Integer.parseInt(soal1.getString());
    int b = Integer.parseInt(soal2.getString());
    int c = Integer.parseInt(soal3.getString());
    int d = Integer.parseInt(soal4.getString());
    int e = Integer.parseInt(soal5.getString());
    if(a == 5){
        a=2;
    }
    else if(a != 5){
        a=0;
    }
    if(b==4){
        b=2;
    }
    else if(b != 4){
        b=0;
    }
    if(c==12){
        c=2;
    }
    else if(c != 12){
        c=0;
    }
    if(d==5){
        d=2;
    }
    else if(d !=2 ){
        d=0;
    }
    if(e==10){
        e=2;
    }
    else if(e != 10){
        e=0;
    }
 
 
    Nakhir = a + b + c + d + e;
  byte[] temp = null;
  try
  {
      //kosntruktor baos dan dos
      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      DataOutputStream dos = new DataOutputStream(baos);
      //cari fungsi ini ByteArrayOutputStream dan DataOutputStream di internet

      dos.writeUTF(id);// tulis var pada dos
      dos.writeInt(Nakhir);
      temp = baos.toByteArray();
  }
  catch (IOException ioe)
  {
      ioe.printStackTrace();
  }
  try
  {
      rs.addRecord(temp, 0, temp.length); //masukan data pada RecordStore
  } catch (RecordStoreNotOpenException rsnoe) {
    rsnoe.printStackTrace();
  } catch (RecordStoreException rse) {
    rse.printStackTrace();
  }
}
public void lihatRecord() {
    byte[] temp = null;
    list.setTitle("Nilai Tertinggi");
    list.deleteAll();
 
    try
    {
        re = rs.enumerateRecords(null, null, false); //enumerasi record
        while (re.hasNextElement()) //jk elemen rs lbh dr satu
        {
            int i = re.nextRecordId();
            temp = rs.getRecord(i);
            ByteArrayInputStream bais = new ByteArrayInputStream(temp);
            DataInputStream dis = new DataInputStream(bais);

            try
            {
                String id = dis.readUTF();
                //Integer Nakhir = dis.readUTF();
                list.append(id + " = "+ Nakhir +" \n",null);// tampilkan
            }
            catch (IOException ioe) {ioe.printStackTrace();}
      }
      list.addCommand(cmdKembali);
      list.setCommandListener(this);
      display.setCurrent(list);
    }
    catch (InvalidRecordIDException invID) {invID.printStackTrace();}
    catch (RecordStoreNotOpenException rsnoe) {rsnoe.printStackTrace();}
    catch (RecordStoreException rse) {rse.printStackTrace();}

  }
}

Rabu, 03 Oktober 2012

Lab Activity 3 - High Level User Interface

Edit Posted by with No comments
High level user interface berguna untuk membangun aplikasi sederhana , berupa aplikasi text based. Selain itu High level user interface ini dipakai saat membuat aplikasi yang digunakan banyak device (portability).
Aplikasi yang menggunakan High level user interface ini memiliki kesamaan tampilan walaupun pada device yang berbeda.
Unsur-unsur pada High level user interface antara lain: Display , Displayable , Title , Screen , Item , Alert , List , Textbox , Form , ChoiceGroup , Date Field , String Item , Image Item dan  Text Field

Pada lab activity akan memuat aplikasi yang menggabungkan beberapa unsur dari high level user interface.
langkah-langkahnya yaitu :

1. Jalankan software NetBeans IDE 7.0.1
2. Buat project baru dengan cara File-> New Project , pilih kategori  Java ME lalu pada kotak sebelah kanan pilih Projects Mobile Application. kemudian klik Next >
3. Selanjutnya kita tentukan nama project dan lokasi penyimpanan. kemudian klik Next >
4. Pilih platform. kita juga dapat memilih gambar emulator sesuai dengan pilihan kita. kemudian klik Next >
5. Klik Finish
6. Selanjutnya buat java class dengan cara klik kanan pada project kemudian pilih new -> Java Class, lalu ketikkan nama file-nya.
7. Kita mulai mengetik program di lembar kerja, ketikkan sesuai dengan source code di bawah ini :




 8. Setelah selesai kita jalankan programnya dengan cara klik kanan pada project dan pilih run akan muncul

 9. Isikan Form secara lengkap


10. Jika terdapat form yang kosong , akan ada peringatan

 11. Jika sudah semuanya terisi klik save, kemudian akan muncul :


 semoga bermanfaat



Selasa, 25 September 2012

Lab Activity 2 : Membuat MIDlet sederhana menggunakan NetBeans Mobility Pack

Edit Posted by with No comments
Sebuah aplikasi dari MIDP disebut sebagai MIDlet. Application Management Software (AMS) dari device ini akan bergerak mengikuti method create, start, pause, dan destroy dalam MIDlet.
MIDlet adalah bagian dari paket javax.microedition.midlet. Sebuah MIDlet harus menjadi turunan dari class MIDlet. Ia dapat meminta parameter-parameter yang dibutuhkan dari AMS seperti yang telah didefinisikan pada aplication descriptor (JAD)
Langkah - Langkah Membuat MIDlet sederhana :
NetBeans  dan NetBeans Mobility Pack harus sudah terinstall di komputer Anda.

1. Buka Netbeans
2. Setelah Netbeans Terbuka, buat new Project
    File - New Project , pilih Java ME
    

3. Isi judul project, misal : Hello World
    Tentukan direktori penyimpanan project, lalu klik next untuk konfigurasi lanjutan atau finish

    
4. Klik pada Source di atas editor
    Lalu ketikan code seperti di bawah ini :



 
Setelah selesai dan tidak ditemui error, jalankan program dengan mengklik ikon Run
Maka akan ada tampilan emulator sebagai berikut
 
 
Semoga bermanfaat

Selasa, 18 September 2012

Lab Activity 1 (Pemrogaman Berbasis Objek Review)

Edit Posted by with No comments
Lab Activity ini kembali membahas tentang salah satu program berbasis objek, projek nya berupa class 'Bank', class 'Nasabah' dan class 'Budi'.
dalam program ini menunjukkan salah datu contoh program yang menggunakan konsep OOP, langkah-langkah membuat project nya dapat di lihat di bawah ini :
  • Membuat Java Project 




  •  Membuat Package

  • Membuat Class

  • Tampilan Eclipse

  • Mengisi bank.java


  •  Mengisi nasabah.java

  • Membuat Class budi sebagai turunan dari kelas nasabah



  • hasil Run 1 :


Percobaan 2
  • Selanjutnya, kita akan mencoba melakukan sedikit modifikasi class Bank dengan melakukan overloading constructornya
  • Melakukan modifikasi juga pada class Nasabah menjadi seperti ini

 

  • dan melakukan modifikasi pula pada class Budi
  • Hasil Run :

Percobaan 3

  • Modifikasi selanjutnya yaitu menggunakan constructor lain untuk membuat objek pada class Bank yang ada pada class Nasabah
  • Hasil Run

Semoga Bermanfaat