Исчерпывающий пример по RecordStore j2me?

0) На дворе 2023 год (конец). У всех мобильные устройства с Андроид/IOS: телефоны, планшеты, часы и другие.

1) У меня кнопочный телефон с поддержкой j2me+, Netbeans 7.4+, j2me sdk+, emulator.

2) В сети нету примера по этой технологии, чтобы работал как часы. Везде какие-то недоработанные примерчики.

3) Глобальная задача такая: нужен полный пример (не класс, недоработанный, с багами) по RecordStore, а именно: чтобы мидлет включал в себя следующие методы:

Create_If_Not_exist/Open/Append/Set/Delete/Get_Number_Of_Records/Get_All_Recod_Store_List/
Delete_All_Record_Store_List/Close.

4) Локальная задача такая:

При первом запуске мидлета:
Создал.
Открыл.
Добавил 10 записей с текстом "Hello_World".
Закрыл.


При втором запуске и далее всегда:
Открыл.
Считал. (Вывел на экран все 10 записей (этих же, которые сохранил).)
2-ю запись сделал такой: "Hello_World_2222222".
Закрыл.

5) Это всё что нужно. Заранее спасибо.


Ответы (1 шт):

Автор решения: Arthur Alunts

Вот что получилось. Думаю, локальная задача решена полностью. Код взял у пользователя @Lucifer, и немного подкрасил. Все замечания в коде написаны, оказывается, надо нажимать на кнопку ("стоп") в Netbeans 7.4 , а эмулятор не закрывать, иначе все записи удаляются. А потом снова нажимать на кнопку ("запустить").

package k; 

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

public class RW extends MIDlet
{

 public static RecordStore rs = null;
 public static RecordEnumeration re=null;
 public static int Length0000=10;
 public static String EmptyValue = "Hello World";
 public static String REC_STORE_NAME = "MyRS0000";
 public static int NumberOfRecordStore = 0;

 public RW(){
  
}
  public static void create_Storage(int Length) throws RecordStoreNotOpenException
  { if(!(rs.getNumRecords()>0)){
    for(int i=1;i<=Length0000;i++){appendRecord((EmptyValue));} 
  }
  printing("Recordstore: "+ REC_STORE_NAME+ "is created");
  }

  

  public void startApp() 
  {
     //new RW();
      
       //Внимание_0: нужно нажимать на красную кнопку не телефона эмулятора,
      //а красную кнопку вывода консоли("остановить"),и потом, снова зеленую кнопку 
     //IDE Netbeans("запустить"), и так N раз. Т.о. эмулятор не закрывается,
    //и все записи хранилища (RecordStore) сохраняются.
   //Код взят от пользователя (Lucifer) с сайта stackoverflow.com.
  //и доработан мною (Alunts Arthur Arthurovich).
      
  //нимание_1: Хранилище индексируется с 1 (но не с 0).
  //Внимание_2: Не забваейте инициировать пременные, если используете класс как внешний.  
  //Внимание_3: Не забвайте дописывать логику сохранения в destroyApp();
      
     try {  
      openRecStore();
      create_Storage(10);              //создаем хранилище с 10-ю записями 
                                      //со стнадартным значением EmptyValue. 
      //appendRecord("Hello World");  //добавляем 1 новую запись запись в конец,
      if((rs.getNextRecordID()>0)){
      setRecord(2, "Hello_World_2222222");} // задаём запись под номером 2
     
      getRecord(2);                //читаем запись под номером 2  
      read_All_Records();         //читаем все записи
      getNumber_0();             //Выдаем число всех записей    
      getRecordStore_Name(rs);  //Читаем имя оккрытой записи
      closeRecStore();         // закрываем все записи
      //deleteRecStore();    // удаляем все записи хранилища (хранилище должно быть закрыто)
   } catch (RecordStoreNotOpenException ex) {  ex.printStackTrace();     } catch (RecordStoreException ex) {
         ex.printStackTrace();
   }
  }

  public void pauseApp()
  {
  }
public void destroyApp( boolean unconditional )
  {
    //Здесь сохраняемся, если нужно:
    
    // делаем:  appendRecord("Record_11111");
    // делаем:  setRecord(2, "Value_22222");
    // делаем:  closeRecStore();  
     printing("Saved, CloseD , Exit");//Эта строчка может и не выводится  
     notifyDestroyed();   
  }
  
public static void openRecStore()
  {
    try
    {
      rs = RecordStore.openRecordStore(REC_STORE_NAME, true );
      printing("RecordStore: "+REC_STORE_NAME +" is opened!");
      if(rs.getNumRecords()>0){
      printing("RecordStore: "+REC_STORE_NAME +" is created!");
    }
    }
    catch (Exception e)    { printing(e.toString()); 
    }
  }  
  
  public static void getRecordStore_Name(RecordStore RS)
  {
    try
    {
      if(rs.getNumRecords()>0){
            String Name0 = rs.getName();
           // int ID_0 = rs.getNextRecordID();
          printing("Name_of_Opened_RecordStore: " + Name0  + "");
    } 
    }
    catch (Exception e)
    {
      printing(e.toString());
    }
  }  
  
public static void getNumber_0()  
   {
try{
  NumberOfRecordStore=rs.getNumRecords();
  printing("Number of Records is: "+NumberOfRecordStore);
    }catch(Exception ex){ex.printStackTrace();}


}
  public static void closeRecStore()
  {
    try
    {
      rs.closeRecordStore();
      System.out.println("RecordStore: "+REC_STORE_NAME +" is closed");
    }
    catch (Exception e)
    {
      printing(e.toString());
    }
  }
  public static void deleteRecStore()
  {
    if (RecordStore.listRecordStores() != null)
    {
      try
      {
        RecordStore.deleteRecordStore(REC_STORE_NAME);
        printing("RecordStore: "+REC_STORE_NAME +" is deleted");
      }
      catch (Exception e)
      {
        printing(e.toString());
      }
    }      
  }
  public static void appendRecord(String str)
  {
    byte[] rec=null; 
    rec =str.getBytes();

    try
    {
     rs.addRecord(rec, 0, rec.length);
     printing(str + " Record is appended: " );
    }
    catch (Exception e)
    {
      printing(e.toString());
    }
  }
  
  public static void setRecord(int i, String str)
  {
    byte[] rec = str.getBytes();

    try
    {
      rs.setRecord(i, rec, 0, rec.length);
      //rs.setRecord(rec, 0, rec.length);
      printing("Record is setted "+ "["+ i+ "]: "+ str);
    }
    catch (Exception e)
    {
      printing(e.toString());
    }
  }
  

  public static String getRecord(int i)  {
      int ii=0;
      String Out="";
    try
    {
       byte[] recData = new byte[10];//Не знаю зачем это надо!
      int len;
      if (i<=rs.getNumRecords()){
      if (rs.getRecordSize(i) > recData.length)
       recData = new byte[rs.getRecordSize(i)];
        len = rs.getRecord(i, recData, 0);
        Out = new String(recData, 0, len);
        ii=i;
        printing("Record is getted: "+ "["+ ii+ "]"+ Out);

      }
   
    }
    catch (Exception e)
    {
      printing(e.toString());
    }
    return Out;
  }
  
  public static void read_All_Records() throws RecordStoreException{
int i=0;
re = rs.enumerateRecords(null, null, false);
while (re.hasNextElement()){
    i++;
String s = new String(re.nextRecord());
printing("Readen record ["+ i +"] is : " + s+"" );
}}
  
  
  static void printing(String str)
  {
    System.out.println(" " + str);
  }
}
→ Ссылка