问题
I have written a LWUIT application that involves two RecordStores recordStore
and
recordStore2 .
Two methods method getRecordData for retriving all records of
recordStore, method getRecordData2 for retriving all records of
recordStore2 .
two Radiobuttons rb and rb2 are added ButtonGroup called group
A TextField called tf
addition button for adding a record for either recordstore or recordstore2
after rb or rb2 is selected
a text which must written into tf TextField as a record
Two lists mylist and mylist2
mylist to display all records of recordstore
mylist2 to display all records of recordstore2
All button to display all records of recordstore and recordstore2
Simple problem faces me:-
After I exit from the application return back to it and press All button
mylist and mylist2 are null (No record displayed)!
Can anyone thankfully helps me
import java.util.*;
import com.sun.lwuit.table.*;
import com.sun.lwuit.table.DefaultTableModel;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreNotOpenException;
import javax.microedition.rms .*;
import com.sun.lwuit.layouts.*;
import com.sun.lwuit.*;
import javax.microedition.lcdui.Canvas;
import com.sun.lwuit.events.*;
import com.sun.lwuit.plaf.*;
import javax.microedition.midlet.*;
import com.sun.lwuit.geom.*;
import com.sun.lwuit.*;
import com.sun.lwuit.events.*;
public class HelloLWUITMidlet3 extends MIDlet implements Runnable, ActionListener
{
private RecordStore recordStore,recordStore2;
String team,team2;
public String [] getRecordData()
{
String[] str = null;
int counter = 0;
try
{
RecordEnumeration enumeration = recordStore.enumerateRecords(null, null, false);
str = new String[recordStore.getNumRecords()];
while(enumeration.hasNextElement())
{
try
{
str[counter] = (new String(enumeration.nextRecord()));
counter ++;
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
return str;
}
public String [] getRecordData2()
{
String[] str = null;
int counter = 0;
try
{
RecordEnumeration enumeration = recordStore2.enumerateRecords(null, null, false);
str = new String[recordStore2.getNumRecords()];
while(enumeration.hasNextElement())
{
try
{
str[counter] = (new String(enumeration.nextRecord()));
counter ++;
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
return str;
}
public void startApp()
{
com.sun.lwuit.Display.init(this);
int bgColor =0x0066CC;
final ButtonGroup group = new ButtonGroup();
final RadioButton rb = new RadioButton("First Team");
final RadioButton rb2 = new RadioButton("Second Team");
group.add(rb);
group.add(rb2);
final f1 g = new f1();
final com.sun.lwuit.List mylist = new com.sun.lwuit.List();
final com.sun.lwuit.List mylist2 = new com.sun.lwuit.List();
final form6 my = new form6();
final com.sun.lwuit.Form f = new com.sun.lwuit.Form("Football");
f.getStyle().setBgColor(0X99CCFF);
BoxLayout boxlayout =new BoxLayout(BoxLayout.X_AXIS);
final Button goals = new Button("See goals");
final Button button = new Button("Goals Record");
final com.sun.lwuit.TextField tf =new com.sun.lwuit.TextField();
final com.sun.lwuit.TextField txtfield5 =new com.sun.lwuit.TextField();
final com.sun.lwuit.TextField txtfield6 =new com.sun.lwuit.TextField();
final Button addition = new Button("Add Goals");
final Button All = new Button("All Goals");
addition.getStyle().setBgColor(0X0066CC);
com.sun.lwuit.Command back = new com.sun.lwuit.Command("Main_Screen");
final form6 ff = new form6();
button.getStyle().setBgColor(0X0066CC);
goals.getStyle().setBgColor(0X0066CC);
All.getStyle().setBgColor(0X0066CC);
Style g_style5 = g.getSelectedStyle() ;
f.addComponent(button);
ff.addCommand(back);
//g.addComponent(main_screen);
g.addComponent(tf);
g.addComponent(addition);
g.addComponent(rb);
g.addComponent(rb2);
g.addComponent(All);
g.getStyle().setBgColor(0X99CCFF);
g.addCommand(back);
g.addCommandListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae) {
f.show();
}
}
);
ff.addCommandListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae) {
f.show();
}
}
);
ff.getStyle().setBgColor(0X99CCFF);
try{
recordStore2 = RecordStore.openRecordStore("My Record Store2", true);
}
catch(Exception ex)
{ }
try
{
recordStore = RecordStore.openRecordStore("My Record Store", true);
}
catch(Exception ex)
{ }
All.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
try
{
com.sun.lwuit.Label l = new com.sun.lwuit.Label("First Team Goals") ;
ff.addComponent(l);
String [] record= getRecordData();
int j1;
String valueToBeInserted2="";
for( j1=0;j1< getRecordData().length;j1++)
{
valueToBeInserted2=valueToBeInserted2 + " " + record[j1];
if(j1==getRecordData().length)
{
mylist.addItem(record[j1]);
}
}
ff.addComponent(mylist);
com.sun.lwuit.Label ll = new com.sun.lwuit.Label("Second Team Goals") ;
ff.addComponent(ll);
String [] record2= getRecordData2();
int j2;
String valueToBeInserted="";
for( j1=0;j1< getRecordData().length;j1++)
{
valueToBeInserted2=valueToBeInserted2 + " " + record[j1];
if(j1==getRecordData().length)
{
mylist.addItem(record[j1]);
}
}
ff.addComponent(mylist2);
}
catch(java.lang.IllegalArgumentException e)
{
}
finally
{
ff.show();
}
}
}
);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
g.show();
}
}
);
goals.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae) {
}
}
);
final Thread th = new Thread(this);
addition.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae) {
String s =tf.getText();
if(rb.isSelected())
{
if(s!=null && s.length() > 0)
{
try{
String kk =tf.getText();
mylist.addItem(kk);
byte bytestream[] = kk.getBytes() ;
int i = recordStore.addRecord(bytestream, 0, bytestream.length);
}
catch(Exception ex)
{ }
Dialog validDialog = new Dialog(" ");
Style Dialogstyle = validDialog.getSelectedStyle() ;
validDialog.setScrollable(false);
validDialog.getDialogStyle().setBgColor(0x0066CC);
validDialog.setTimeout(1000);
TextArea textArea = new TextArea("....");
textArea.setFocusable(false);
textArea.setText("A new goal has been added"+"" );
validDialog.addComponent(textArea);
validDialog.show(0, 10, 10, 10, true);
}
}
else if (rb2.isSelected())
{
if(s!=null && s.length() > 0)
{
try{
String kk =tf.getText();
mylist2.addItem(kk);
byte bytestream[] = kk.getBytes() ;
int i = recordStore2.addRecord(bytestream, 0, bytestream.length);
}
catch(Exception ex) { }
Dialog validDialog = new Dialog(" ");
Style Dialogstyle = validDialog.getSelectedStyle() ;
validDialog.setScrollable(false);
validDialog.getDialogStyle().setBgColor(0x0066CC);
validDialog.setTimeout(1000);
TextArea textArea = new TextArea("....");
textArea.setFocusable(false);
textArea.setText("A new Goal has been added"+"" );
validDialog.addComponent(textArea);
validDialog.show(0, 10, 10, 10, true);
}
}
else if((rb.isSelected()==false&&rb.isSelected()==false)||(s==null && s.length()<= 0))
{
Dialog validDialo = new Dialog(" ");
validDialo.setScrollable(false);
validDialo.getDialogStyle().setBgColor(0x0066CC);
validDialo.setTimeout(5000);
TextArea textArea = new TextArea("....");
textArea.setFocusable(false);
textArea.setText("please enter scorer name and choose his team");
validDialo.addComponent(textArea);
validDialo.show(50, 50, 50, 50, true);
txtfield6.clear();
}
}
}
);
f.show();
}
public void run ()
{
while(true)
{
String get[] = getRecordData();
Dialog validDialog = new Dialog(" ");
Style Dialogstyle = validDialog.getSelectedStyle() ;
validDialog.setTimeout(5000);
validDialog.setScrollable(true);
validDialog.setLayout(null);
validDialog.setTimeout(5000);
TextArea textArea = new TextArea( );
for(int ii=0;ii<getRecordData().length;ii++ )
{
textArea.setColumns(getRecordData().length);
validDialog.addComponent(textArea);
validDialog.show(10, 10, 10, 10, true);
System.out.println(get[ii]+"\n");
System.out.println(textArea.getColumns()+"\n");
}
}
}
public void pauseApp()
{
}
public void destroyApp(boolean unconditional)
{
}
public void actionPerformed(ActionEvent ae)
{
notifyDestroyed();
}
public class f1 extends com.sun.lwuit.Form
{
com.sun.lwuit.TextField tf;
public f1()
{
com.sun.lwuit.Form f1 = new com.sun.lwuit.Form("Goals Records");
tf =new com.sun.lwuit.TextField();
}
}
public class form6 extends com.sun.lwuit.Form
{
com.sun.lwuit.TextField txtfield3;
com.sun.lwuit.TextField tf3;
public form6()
{
com.sun.lwuit.Form mylist = new com.sun.lwuit.Form("Goals List");
}
}
}
回答1:
you should first open recordStore and than read it's contents. in getRecordData() method you should first open record store and than use
RecordEnumeration enumeration = recordStore.enumerateRecords(null, null, false);
modify method to this:
public String [] getRecordData()
{
String[] str = null;
int counter = 0;
try
{
recordStore = RecordStore.openRecordStore("NameOfrecordStore", true);
RecordEnumeration enumeration = recordStore.enumerateRecords(null, null, false);
str = new String[recordStore.getNumRecords()];
while(enumeration.hasNextElement()){
try{
str[counter] = (new String(enumeration.nextRecord()));
counter ++;
}catch (Exception e){
e.printStackTrace();
}
}
} catch (Exception e){
e.printStackTrace();
}
return str;
}
do same thing in getRecordData2() add this code
recordStore2 = RecordStore.openRecordStore("NameOfrecordStore2", true);
before
RecordEnumeration enumeration = recordStore2.enumerateRecords(null, null, false);
remember when you use rms first open record store and than use it(read, change, delete,...).
// new answer to question //replace this code with your according code;
//first replace this
addition.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae) {
String s =tf.getText();
if(rb.isSelected()){
if(s!=null && s.length() > 0){
try{
byte bytestream[] = s.getBytes() ;
recordStore = RecordStore.openRecordStore("RecordStore1", true);
int i = recordStore.addRecord(bytestream, 0, bytestream.length);
}catch(Exception ex) {
ex.toString();
}
}
}else if (rb2.isSelected()){
if(s!=null && s.length() > 0){
try{
byte bytestream[] = s.getBytes() ;
recordStore2 = RecordStore.openRecordStore("RecordStore2", true);
int i = recordStore2.addRecord(bytestream, 0, bytestream.length);
}catch(Exception ex) { }
}
}
.....
}
});
//second
All.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
ff.removeAll();
try{
com.sun.lwuit.Label l = new com.sun.lwuit.Label("First Team Goals") ;
ff.addComponent(l);
String [] record= getRecordData();
List mylist = new List(new DefaultListModel(record));
ff.addComponent(mylist);
com.sun.lwuit.Label ll = new com.sun.lwuit.Label("Second Team Goals") ;
ff.addComponent(ll);
String [] record2= getRecordData2();
List mylist2 =new List(new DefaultListModel(record2));
ff.addComponent(mylist2);
}catch(java.lang.IllegalArgumentException e){}
ff.show();
}
});
its work well, its perfect!!.
来源:https://stackoverflow.com/questions/16758114/restore-recordstore-after-exit-application