Kelas sederhana untuk mendukung operasi RMS di Java Micro Edition
RMS adalah sebuah API dimana program dapat menyimpan data-data aplikasi secara lokal didalam device tersebut. MIDP Record Management System adalah sebuah fasilitas yang dimiliki oleh MIDlets untuk menyimpan data-data aplikasi pada saat MIDlet invocations. Data akan disimpan dalam non-volatile memory didalam device. Hal ini berarti, data-data program yang telah disimpan tidak akan hilang walaupun program di restart maupun device dimatikan.
Tutorial RMS di Java Micro Edition dengan kelas Rs.java
1. Buat project Mobile Application di Netbeans anda
2. Beri nama Example Rs, hilangkan tanda check pada Create Hello Midlet kemudian Finish
3. Buatlah 1 buah paket dengan nama example
4. Buatlah 1 buah kelas di paket example dengan nama Main yang merupakan turunan midlet
package example;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
/**
*
* @author Ratno Kustiawan
*/
public class Main extends MIDlet{
protected void startApp() throws MIDletStateChangeException {
}
protected void pauseApp() {
}
protected void destroyApp(boolean bln) throws MIDletStateChangeException {
}
}
5. Buatlah 1 buah kelas di paket example dengan nama FormData yang merupakan turunan Form
package example;
import javax.microedition.lcdui.Form;
/**
*
* @author Ratno Kustiawan
*/
public class FormData extends Form{
public FormData() {
super("Form Data");
}
}
6. Deklarasikan object display dengan type Display
public class Main extends MIDlet {
private Display display;
protected void startApp() throws MIDletStateChangeException {
7. Inisialisasi object display pada method start dengan memanggil static method dari kelas Display, panggil static method yang bernama getDisplay, isi parameter dengan this, untuk menunjukkan midlet yang dituju. Kemudian panggil method setCurrent dari object display untuk menunjukkan tampilan yang akan ditampilkan, yaitu tampilan FormData.
protected void startApp() throws MIDletStateChangeException {
display = Display.getDisplay(this);
display.setCurrent(new FormData());
}
8. Tambahkan 1 buah variabel static pada kelas main dan getternya
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package example;
import javax.microedition.lcdui.Display;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
/**
*
* @author Ratno Kustiawan
*/
public class Main extends MIDlet {
private Display display;
private static Main main;
public static Main getMain() {
return main;
}
protected void startApp() throws MIDletStateChangeException {
display = Display.getDisplay(this);
display.setCurrent(new FormData());
main = this;
}
protected void pauseApp() {
}
protected void destroyApp(boolean bln) throws MIDletStateChangeException {
}
}
9. Tambahkan 2 buah textfield dan 2 buat command pada form anda, textfield nantinya akan digunakan untuk menuliskan dan menampilkan nama serta alamat, kemudian 2 buah command akan digunakan untuk menyimpan data ke RMS dan keluar dari aplikasi
package example;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.TextField;
/**
*
* @author Ratno Kustiawan
*/
public class FormData extends Form {
private TextField txtNama, txtAlamat;
private Command cmdSimpan,cmdKeluar;
public FormData() {
super("Form Data");
txtNama = new TextField("Nama", "", 100, TextField.ANY);
append(txtNama);
txtAlamat = new TextField("Alamat", "", 100, TextField.ANY);
append(txtAlamat);
cmdSimpan = new Command("Simpan", Command.OK, 1);
addCommand(cmdSimpan);
cmdKeluar=new Command("Keluar", Command.EXIT, 2);
addCommand(cmdKeluar);
}
}
10. Atur agar Main.java menjadi midlet yang akan dijalankan pertama kali, klik kanan project, buka properties, pilih Application Descriptor kemudian pilih tab Midlets
11. Tekan Add kemudian cari example.Main lalu OK
12. Coba anda jalankan
13. Tambahkan CommandListener untuk menangkap aksi ketika command ditekan, implementasikan CommandListener pada kelas FormData
public class FormData extends Form implements CommandListener{
private TextField txtNama, txtAlamat;
private Command cmdSimpan,cmdKeluar;
public FormData() {
super("Form Data");
txtNama = new TextField("Nama", "", 100, TextField.ANY);
append(txtNama);
txtAlamat = new TextField("Alamat", "", 100, TextField.ANY);
append(txtAlamat);
cmdSimpan = new Command("Simpan", Command.OK, 1);
addCommand(cmdSimpan);
cmdKeluar=new Command("Keluar", Command.EXIT, 2);
addCommand(cmdKeluar);
}
public void commandAction(Command c, Displayable d) {
}
}
14. Buatlah sebuah kelas dengan nama Rs.java, kelas ini baru mendukung operasi add dan update 1 kolom, silahkan anda kembangkan lebih lanjut, tuliskan kode program berikut
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package example;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreException;
/**
*
* @author Ratno Kustiawan
*/
public class Rs {
public static Rs record;
private Rs(){}
public static void Connect() {
try {
if (record == null) {
record = new Rs();
record.Open();
}
} catch (RecordStoreException ex) {
}
}
private volatile RecordStore database = null;
private void Open() throws RecordStoreException {
database = RecordStore.openRecordStore("setting", true);
}
public void Close() {
try {
if (database.getNumRecords() == 0) {
String fileName = database.getName();
database.closeRecordStore();
RecordStore.deleteRecordStore(fileName);
} else {
database.closeRecordStore();
}
} catch (RecordStoreException ex) {
}
}
public boolean Add(String record) {
try {
if (database.getNumRecords() == 0) {
int id = database.addRecord(record.getBytes(), 0, record.getBytes().length);
} else {
Update(record, 1);
}
return true;
} catch (RecordStoreException ex) {
return false;
}
}
public boolean Update(String record, int id) {
try {
database.setRecord(id, record.getBytes(), 0, record.getBytes().length);
return true;
} catch (RecordStoreException ex) {
return false;
}
}
public String Get(int id) {
try {
return new String(database.getRecord(id));
} catch (RecordStoreException ex) {
return null;
}
}
}
15. Panggil method setCommandListener pada konstruktor FormData
public class FormData extends Form implements CommandListener{
private TextField txtNama, txtAlamat;
private Command cmdSimpan,cmdKeluar;
public FormData() {
super("Form Data");
txtNama = new TextField("Nama", "", 100, TextField.ANY);
append(txtNama);
txtAlamat = new TextField("Alamat", "", 100, TextField.ANY);
append(txtAlamat);
cmdSimpan = new Command("Simpan", Command.OK, 1);
addCommand(cmdSimpan);
cmdKeluar=new Command("Keluar", Command.EXIT, 2);
addCommand(cmdKeluar);
setCommandListener(this);
}
16. pada method CommandAction tambahkan kode program untuk menyimpan ke RMS dan keluar dari aplikasi
public void commandAction(Command c, Displayable d) {
if (c.equals(cmdSimpan)) {
Rs.record.Add(txtNama.getString() + "|" + txtAlamat.getString());
} else if (c.equals(cmdKeluar)) {
Main.getMain().notifyDestroyed();
}
}
17. Tambahkan kode program berikut di Konstruktor FormData
String data = Rs.record.Get(1);
if (data == null) {
return;
}
txtNama.setString(data.substring(0, data.indexOf("|")));
txtAlamat.setString(data.substring(data.indexOf("|1") + 2));
18. Agar tidak bingung berikut listing kode program FormData.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package example;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.TextField;
/**
*
* @author Ratno Kustiawan
*/
public class FormData extends Form implements CommandListener {
private TextField txtNama, txtAlamat;
private Command cmdSimpan, cmdKeluar;
public FormData() {
super("Form Data");
txtNama = new TextField("Nama", "", 100, TextField.ANY);
append(txtNama);
txtAlamat = new TextField("Alamat", "", 100, TextField.ANY);
append(txtAlamat);
cmdSimpan = new Command("Simpan", Command.OK, 1);
addCommand(cmdSimpan);
cmdKeluar = new Command("Keluar", Command.EXIT, 2);
addCommand(cmdKeluar);
setCommandListener(this);
Rs.Connect();
String data = Rs.record.Get(1);
if (data == null) {
return;
}
txtNama.setString(data.substring(0, data.indexOf("|")));
txtAlamat.setString(data.substring(data.indexOf("|") + 1));
}
public void commandAction(Command c, Displayable d) {
if (c.equals(cmdSimpan)) {
Rs.record.Add(txtNama.getString() + "|" + txtAlamat.getString());
} else if (c.equals(cmdKeluar)) {
Main.getMain().notifyDestroyed();
}
}
}
Friday, March 19, 2010
Kelas sederhana untuk mendukung operasi RMS di Java Micro Edition
Tuesday, November 11, 2008
Explorer Your Dll
String path=openFileDialog1.FileName;
System.Reflection.Assembly a = System.Reflection.Assembly.LoadFrom(@path);
Type[] arrT = a.GetTypes();
listBox1.Items.Clear();
foreach (Type t in arrT)
{
listBox1.Items.Add("Namespace = " + t.Namespace);
listBox1.Items.Add("Class names = " + t.Name);
System.Reflection.MethodInfo[] arrMI = t.GetMethods();
System.Reflection.FieldInfo[] arrFi = t.GetFields();
System.Reflection.ConstructorInfo[] arrCi = t.GetConstructors();
foreach (System.Reflection.ConstructorInfo ci in arrCi)
{
listBox1.Items.Add("Contructor = " + ci.Name);
System.Reflection.ParameterInfo[] arrPI = ci.GetParameters();
foreach (System.Reflection.ParameterInfo pi in arrPI)
{
listBox1.Items.Add("Parameter = " + pi.Name);
}
}
foreach (System.Reflection.FieldInfo fi in arrFi)
{
listBox1.Items.Add("Field = " + fi.Name);
}
foreach (System.Reflection.MethodInfo mi in arrMI)
{
listBox1.Items.Add("Method = " + mi.Name);
System.Reflection.ParameterInfo[] arrPif = mi.GetParameters();
foreach (System.Reflection.ParameterInfo pif in arrPif)
{
listBox1.Items.Add("Parameter Name = " + pif.Name);
listBox1.Items.Add("Parameter DataType = " + pif.ParameterType.Name);
}
}
}
How to invoke your Dll using relative path
public Form1()
{
InitializeComponent();
Assembly a = Assembly.LoadFile(@"F:\by Ratno\Final Skripsi\UML Studio Project\NeutralNotation\bin\Debug\NeutralNotation.dll");
Module m = a.GetModule("NeutralNotation.dll");
Type typen = null;
foreach (Type t in m.GetTypes())
{
if (t.Name.Trim().Equals("Neutral"))
{
typen = t;
}
}
ConstructorInfo[] ci;
ci = typen.GetConstructors();
d=(AbstractDiagram.IDiagram) ci[0].Invoke(null);
toolStrip1.Items.AddRange(d.GetNotationCollection());
}
Assembly Explorer
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
namespace Engine.Asm
{
///
/// Class ini digunakan untuk melakukan penjelajahan ke
/// dalam dll
///
public class AssemblyExplorer
{
private string path;
private List
protected Assembly asm;
protected Type[] arrType;
public string getName()
{
return asm.ManifestModule.Name;
}
///
/// Buat instant baru dari class AssemblyExplorer
///
/// path lokasi dll yang akan diload
public AssemblyExplorer(string path)
{
try
{
this.path = path;
asm = Assembly.LoadFile(path);
////System.Windows.Forms.MessageBox.Show(asm.ManifestModule.Name);
arrType = asm.GetTypes();
lstBaseName = new List
foreach (Type t in arrType)
{
if (!lstBaseName.Contains(t.BaseType.Name))
lstBaseName.Add(t.BaseType.Name);
}
}
catch (ReflectionTypeLoadException e)
{
System.Windows.Forms.MessageBox.Show(e.Message,e.GetType().Name);
}
catch (BadImageFormatException e)
{
System.Windows.Forms.MessageBox.Show(e.Message, e.GetType().Name);
}
catch (NullReferenceException e)
{
System.Windows.Forms.MessageBox.Show(e.Message, e.GetType().Name);
}
}
///
/// Ambil daftar kelas induk dari semua kelas
/// yang terdapat pada dll ini
///
///
public List
{
return lstBaseName;
}
///
/// Cek, apakah suatu dll memiliki kelas
/// yang memiliki suatu kelas induk
///
/// nama kelas induk
///
/// memiliki
public bool containtBaseClass(string baseClass)
{
if (lstBaseName == null)
return false;
foreach (string s in lstBaseName)
{
if (s.Trim().Equals(baseClass))
return true;
}
return false;
}
///
/// Ambil suatu class berdasar nama
///
/// nama kelas yang dicari
///
/// atau mengembalikan kelas
/// bila ditemukan
public Type getClass(string ClassName)
{
if (arrType == null)
return null;
foreach (Type t in arrType)
{
if (t.Name.Equals(ClassName))
return t;
}
return null;
}
~AssemblyExplorer()
{
path = null;
asm = null;
lstBaseName = null;
arrType = null;
}
}
}