ورود

View Full Version : مشکل در بازیابی داده با RMS



solaleh
یک شنبه 08 شهریور 1388, 13:06 عصر
سلام
من برای اضافه کردن و بازیابی داده در RMS از کد زیر استفاده می کنم.


public void commandAction(Command command, Displayable displayable) {
if(command==exit)
{
destroyApp(true);
notifyDestroyed();
}
else if(command==start)
{
try
{
recordstore=RecordStore.openRecordStore("My RecordStore",true);
}
catch(Exception error)
{
alert=new Alert("Error Creating",error.toString(),null,AlertType.WARNING);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
}
try
{
String outPutData[]={"Mary","Bob","Adam"};
for(int x=0;x<3;x++)
{
byte[] byteOutPutData=outPutData[x].getBytes();
recordstore.addRecord(byteOutPutData,0,byteOutPutD ata.length);
}
}

catch(Exception error)
{
alert=new Alert("Error Waiting",error.toString(),null,AlertType.WARNING);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
}
try
{
byte[] byteInputData=new byte[1];
int length=0;
for(int x=1;x<=recordstore.getNumRecords();x++)
{
if(recordstore.getRecordSize(x)>byteInputData.length)
{
byteInputData=new byte[recordstore.getRecordSize(x)];
}
length=recordstore.getRecord(1,byteInputData,0);
}
alert = new Alert("Reading", new String(byteInputData, 0,length), null, AlertType.WARNING);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);


}
catch (Exception error)
{
alert = new Alert("Error Reading", error.toString(),null, AlertType.WARNING);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
}
try
{
recordstore.closeRecordStore();
}
catch (Exception error)
{
alert = new Alert("Error Closing", error.toString(),null, AlertType.WARNING);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
}
if (RecordStore.listRecordStores() != null)
{
try
{
recordstore.deleteRecordStore("MY RecordStore");
}
catch (Exception error)
{
alert = new Alert("Error Removing", error.toString(),null, AlertType.WARNING);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
}
}
}
}


ولی وقتی Run می کنم ، به جای مشاهده ی رکوردها error زیر را می بینم :

mic_r_c
یک شنبه 08 شهریور 1388, 23:01 عصر
سلام،
صرف نظر از اینکه منطق برنامه با هدفی که دارید، یعنی نمایش رکورد ها، مطابقت ندارد ولی تمام کدهای شما صحیح است.

کار برنامه شما این است که یک RMS را باز می کند، سه تا رکورد را می نویسد، رکورد اول را سه بار می خواند، وبعد RMS را می بندد.

اما پاک کردن کل یک RMS یکمی مشکل دارد.

یک RMS اگر قرار است که پاک شود، به هیچ وجه نباید در طول برنامه باز شود. یا اینکه اشاره گری به آن نباید وجود داشته باشد. یعنی recordstore را با یک RMS دیگه ست کنید تا مشکل بر طرف بشه.

این خطایی هم که میبینید مربوط میشه به پاک کردن RMS.

و اما متد deleteRecordStore یک متد استاتیک است. یعنی دست رسی به آن از طریق شئ امکان پذیر است ولی نتیجه یه خوبی ندارد. چرا که شئ در بعضی از اعمال مانند همین پاک کردن RMS باید کاملا destroy یا نابود شود.

موفق باشید