ورود

View Full Version : سوال: اشکال در تغییر محتوای رکورد هنگام استفاده از RMS ؟؟؟



mahdi68
دوشنبه 28 دی 1388, 15:39 عصر
سلام
وقتی از RMS استفاده میکنیم برای اینکه بعد از تغییر محتوای رکورد اون تغییرات save بشن و در اجرای دوباره بشه رکورد تغییر داده شده رو دید چیکار باید کرد ؟؟؟ من تو کد زیر رکورد تغییر میدم ولی بعد اینکه برنامه میبندم و دوباره اجرا میکنم تغییرات اعمال نمیشه !!! من میخوام برنامه وقتی برای بار اول اجرا میشه یه record store ایجاد کنه و تعدادی رکورد بهش اضافه کنه بعد این رکورد ها رو ویرایش و ذخیره کنم حالا مشکلم اینه که هر بار که برنامه اجرا میشه این کارا تکرار میشن و تغییرات که تو رکورد ها دادم از بین میرن !!! لطفا راهنماییم کنید که چطوری این مشکل حل کنم
متشکرم

/*
* this is sampel code for use RMS
*
*/

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

/**
* @author mahdi
*/
public class Midlet extends MIDlet implements CommandListener {

Form form;
TextField userName, password, recordsNuml;
Command cmd1, cmd2;
private RecordStore rs;
int id1, id2, id3;
String str, str1,str2;
byte[] rec;

public void startApp() {

//////////Form and Items and Command dicliration
userName = new TextField("user name :", null, 20, TextField.ANY);
password = new TextField("password :", null, 20, TextField.ANY);
recordsNum = new TextField("Recoeds Num :", null, 20, TextField.ANY);

form = new Form("Login", new Item[]{userName, password, recordsNum});
cmd1 = new Command("Exit", Command.EXIT, 1);
cmd2 = new Command("OK", Command.OK, 1);
form.setCommandListener(this);
form.addCommand(cmd1);
form.addCommand(cmd2);

////////////Create RecordStore
try {
rs = RecordStore.openRecordStore("ID", true);
} catch (RecordStoreException ex) {
ex.printStackTrace();
}

////////////////add records
String user = "mahdi", pass = "مهدی", java = "java";
byte[] byte1 = user.getBytes(), byte2 = pass.getBytes(), byte3 = java.getBytes();
try {
id1 = rs.addRecord(byte1, 0, byte1.length);
id2 = rs.addRecord(byte2, 0, byte2.length);
id3 = rs.addRecord(byte3, 0, byte3.length);
} catch (Exception ex) {
ex.printStackTrace();
}


/////////Display Form
Display.getDisplay(this).setCurrent(form);

}

public void pauseApp() {
}

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

public void commandAction(Command c, Displayable d) {
if (c == cmd1) {
destroyApp(true);

}
if (c == cmd2) {
try {
//rs.setRecord(id1, "Java".getBytes(), 0, "java".length());
recordsNum.setString(String.valueOf(rs.getNumRecor ds()));
userName.setString(new String(rs.getRecord(id1)));
password.setString(new String(rs.getRecord(id2)));

str2 = userName.getString() + "OK";
rs.setRecord(id1, str2.getBytes(), 0, str2.length());
} catch (RecordStoreNotOpenException ex) {
ex.printStackTrace();
} catch (InvalidRecordIDException ex) {
ex.printStackTrace();
} catch (RecordStoreException ex) {
ex.printStackTrace();
}
}
}
}

ermia2008
سه شنبه 29 دی 1388, 02:13 صبح
سلام دوست عزیز

برنامه رو روی گوشی بریز تستش کن درست میشه! تو Emulator همینطوریه!

mahdi68
سه شنبه 29 دی 1388, 15:34 عصر
سلام
نه رو گوشی هم همینطوری هست !!!!

ermia2008
چهارشنبه 30 دی 1388, 02:00 صبح
به نظرم احتمالا مشکل از مشخص نکردن مقادیر Storage Size و Heap Size باشه
خوب به قسمت Properties پروژت برو و این مسیری که میگم رو دنبال کن:

1- Platform از منوی سمت چپ
2- Manage Emulators سمت راست
3- Tools & Extenstions
4- Open Preferences
5- Storage

حالا تو این قسمت احتمالا مقادیر Heap و Storage خالیه!
به هر دوشون یه مقدار بده مثلا به Storage مقداز 512 و به Heap مقدار 8 رو بده

برنامه رو دوباره Built کن و توی گوشی تستش کن امیدوارم این مشکلتو حل کنه.

موفق باشی

mahdi68
جمعه 02 بهمن 1388, 00:37 صبح
سلام
مشکل من حل نشد !!! چون تو هر بار اجرا رکورد ها دوباره ایجاد میشن !!!
چهطوری میشه فهمید که یک RecordStore خالی هست یا نه یعنی توش رکورد اضافه شده یا نه ؟؟؟

ermia2008
جمعه 02 بهمن 1388, 18:32 عصر
سلام
مشکل من حل نشد !!! چون تو هر بار اجرا رکورد ها دوباره ایجاد میشن !!!
چهطوری میشه فهمید که یک RecordStore خالی هست یا نه یعنی توش رکورد اضافه شده یا نه ؟؟؟

به نظرم اصلا مشکل از طرز خوندن رکورد هاست. چون شما نمی تونید اطلاعاتتون رو مستقیما از RMS بگیرید چون اطلاعات شما به صورت Byte ذخیره شدن. از این نمونه کد برای خوندن اطلاعات داخل RMS استفاده کنید:



ByteArrayInputStream byteIn;
DataInputStream dataIn;
String name;
int moveCount,time;

rs = RecordStore.openRecordStore("EBPuzzleRecords",true);
re = rs.enumerateRecords(null,new sortDesc(),false);

while(re.hasNextElement())
{
byteIn = new ByteArrayInputStream(re.nextRecord());
dataIn = new DataInputStream(byteIn);

name = dataIn.readUTF();
moveCount = dataIn.readInt();
time = dataIn.readInt();

re.destroy();
rs.closeRecordStore();
}