25/05/2018, 08:24

Các hàm API trong RMS

Chúng ta hãy cùng xem qua 2 ví dụ đơn giản của việc đọc ghi record trong RecordStore. Ví dụ 1: đọc và ghi đối tượng string (ReadWrite.java) /*--------------------------------------- ...

Chúng ta hãy cùng xem qua 2 ví dụ đơn giản của việc đọc ghi record trong

RecordStore.

Ví dụ 1: đọc và ghi đối tượng string (ReadWrite.java)

/*--------------------------------------------------

* ReadWrite.java

*

* Read and write to the record store.

*

* No GUI interface, all output is to the console

*-------------------------------------------------*/

import java.io.*;

import javax.microedition.midlet.*;

import javax.microedition.rms.*;

public class ReadWrite extends MIDlet

{

private RecordStore rs = null;

static final String REC_STORE = "db_1";

public ReadWrite()

{

openRecStore(); // Create the record store

// Write a few records and read them back

writeRecord("J2ME and MIDP");

writeRecord("Wireless Technology");

readRecords();

closeRecStore(); // Close record store deleteRecStore(); // Remove the record store

}

public void destroyApp( boolean unconditional )

{

}

public void startApp()

{

// There is no user interface, go ahead and shutdown

destroyApp(false);

notifyDestroyed();

}

public void pauseApp()

{

}

public void openRecStore()

{

try

{

// Create record store if it does not exist

rs = RecordStore.openRecordStore(REC_STORE, true );

}

catch (Exception e)

{

db(e.toString());

}

}

public void closeRecStore()

{

try

{

rs.closeRecordStore();

}

catch (Exception e)

{

db(e.toString());

}

}

public void deleteRecStore()

{

if (RecordStore.listRecordStores() != null)

{

try

{

RecordStore.deleteRecordStore(REC_STORE);

}

catch (Exception e)

{

db(e.toString());

}

}

}

public void writeRecord(String str)

{

byte[] rec = str.getBytes();

try

{

rs.addRecord(rec, 0, rec.length);

}

catch (Exception e)

{

db(e.toString());

}

}

public void readRecords()

{

try

{

byte[] recData = new byte[50];

int len;

for (int i = 1; i <= rs.getNumRecords(); i++)

{

len = rs.getRecord( i, recData, 0 ); System.out.println("Record #" + i + ": " +

new String(recData, 0, len));

System.out.println("------------------------------");

}

}

catch (Exception e)

{

db(e.toString());

}

}

/*--------------------------------------------------

* Simple message to console for debug/errors

* When used with Exceptions we should handle the

* error in a more appropriate manner.

*-------------------------------------------------*/

private void db(String str)

{

System.err.println("Msg: " + str);

}

}

Đây là output của ví dụ 1:

Hàm để mở một recordstore

public void openRecStore()

{

try

{

// Create record store if it does not exist

rs = RecordStore.openRecordStore(REC_STORE, true );

}

catch (Exception e)

{

db(e.toString());

}

}

Với tham số true, hàm sẽ tạo một RecordStore nếu nó chưa tồn tại.

Trong hàm WriteRecord, trước khi lưu vào RecordStore, cần phải chuyển đổi kiểu string thành dãy byte:

byte[] rec = str.getBytes();

...

rs.addRecord(rec, 0, rec.length);

Trong hàm ReadRecord, chúng ta cũng cần đọc một dãy byte:

byte[] recData = new byte[50];

...

len = rs.getRecord( i, recData, 0 );

Cần lưu ý là trong ví dụ trên do biết trước kích thước của string nên khai báo dãy byte vừa đủ, trong thực tế ta nên kiểm tra kích thước của record để khai báo dãy byte cần thiết để tránh phát sinh lỗi, do đó hàm ReadRecord có thể sửa lại như sau:

for (int i = 1; i <= rs.getNumRecords(); i++)

{

if (rs.getRecordSize(i) > recData.length) recData = new byte[rs.getRecordSize(i)]; len = rs.getRecord(i, recData, 0); System.out.println("Record #" + i + ": " + new String(recData, 0, len));

System.out.println("------------------------------");

}

Nếu chỉ cần đọc ghi những đoạn text vào record, thì ví dụ trên là quá đủ. Tuy nhiên, thực tế là ta cần lưu những giá trị

0