Исправления исходников (1-ый пост)  4.12.2018 / 20:38 |  |  Vlad_jonson    Пользователь  
   Сейчас: Offline 
 Имя: Владислав Откуда: Киев Регистрация: 09.08.2014
   | Aladdin, Спасибо    |  
   9.12.2018 / 19:22 |  |  Vlad_jonson    Пользователь  
   Сейчас: Offline 
 Имя: Владислав Откуда: Киев Регистрация: 09.08.2014
   | Вы уж извените,или я тупею или на самом деле из рмс нельзя достать double,я конечно понимаю мол разный размер байтов между типами ну все же знаю что стоит указать компилятору мол все ок я рулю,но в моем случае оказалось все иначе компиль болие чем уверен что я не прав.Кто поможет получить double из byte[]    |  
   10.12.2018 / 10:49 |  |  Askalite    Пользователь  
   Сейчас: Offline 
 Имя: Аскалайт Регистрация: 12.10.2011
   | Vlad_jonson,   byte[] bdouble = new byte[8];  
   
// чтение в bdouble ...  
   
long longBits = ((long)bdouble[0] << 56) +  
            ((long)(bdouble[1] & 255) << 48) +  
            ((long)(bdouble[2] & 255) << 40) +  
            ((long)(bdouble[3] & 255) << 32) +  
            ((long)(bdouble[4] & 255) << 24) +  
            ((bdouble[5] & 255) << 16) +  
            ((bdouble[6] & 255) <<  8) +  
            ((bdouble[7] & 255) <<  0);  
   
double d = Double.longBitsToDouble(longBits);   
  |  
   10.12.2018 / 12:42 |  |  aNNiMON    Супервизор 
   Сейчас: Offline 
 Имя: Витёк Регистрация: 11.01.2010
   | Vlad_jonson, пожалуйста, взгляни на календарь, там 2018, а не 2008. Какой RMS? Давай уже Java SE осваивать, а с него в Android. Оберни свой byte[] в ByteArrayInputStream, а его в DataInputStream и читай readDouble();
  Askalite, побитовое сложение лучше уж использовать, а не арифметическое. Но вообще, это немного индусский код.
  __________________
   let live  Изменено aNNiMON (10.12 / 12:43) (всего 1 раз) |  
   21.11.2023 / 21:30 |  |  N0004    Пользователь  
   Сейчас: Offline 
 Имя: Arthur Alunts Регистрация: 15.10.2023
   | Мне дали на этом сайте код. Я его немножко подрулил, но если запустить второй раз с комментированной строчкой //addData(), выясняется что записи не сохраняются в рекорд сторе, даже при выходе из мидлета. Банально нужен код по рекордстору, который бы сохранял записи при закрытии Мидлета, но этого не происходит.     package j;  
   
   
import javax.microedition.midlet.MIDlet;  
import javax.microedition.rms.*;  
   
class DataStorage {  
   
    public static RecordStore recordStore;  
    public static String[] data=null;  
    public DataStorage(String storeName) {  
        openRecordStore(storeName);  
        //открываем рекордскор  
    }  
   
    private void openRecordStore(String storeName) {  
        try {//открываем рекордскор  
            recordStore = RecordStore.openRecordStore(storeName, true);  
        } catch (RecordStoreException e) {  
            e.printStackTrace();  
        }  
    }  
   
  static public void closeRecordStore_0() {  
        try {//здесь закрываем рекорд стор  
            if (recordStore != null) {  
                recordStore.closeRecordStore();  
           System.out.println("closing record store");  
            }  
        } catch (RecordStoreException e) {  
            e.printStackTrace();  
        }  
    }  
   
    public static void addData (String data) {  
        try {//Здесь добавляем записи к рекрд стору,   
            byte[] byteData = data.getBytes();  
            recordStore.addRecord(byteData, 0, byteData.length);  
        } catch (RecordStoreException e) {  
            e.printStackTrace();  
        }  
    }  
   
    public static void Read_All_Records() {  
        try {  
            //здесь считываем рекордстор  
            RecordEnumeration enumeration = recordStore.enumerateRecords(null, null, false);  
            int numRecords = enumeration.numRecords();  
            data = new String[numRecords];  
            int index = 0;  
            while (enumeration.hasNextElement()) {  
                int recordId = enumeration.nextRecordId();  
                byte[] record = recordStore.getRecord(recordId);  
                data[index++] = new String(record);  
                System.out.println("System reading recordsotores:" + new String(record));  
            }  
            enumeration.destroy();  
            //return data;  
        } catch (RecordStoreException e) {  
            e.printStackTrace();  
        }  
       // return null;  
    }  
   
    public static void deleteAllData() {  
        try {  
            //здесь удаляем весь рекорд стор  
            RecordEnumeration enumeration = recordStore.enumerateRecords(null, null, false);  
            while (enumeration.hasNextElement()) {  
                int recordId = enumeration.nextRecordId();  
                recordStore.deleteRecord(recordId);  
            }  
            enumeration.destroy();  
        } catch (RecordStoreException e) {  
            e.printStackTrace();  
        }  
    }  
}  
   
   
public class MainApp extends MIDlet {  
   
   
    public void startApp() {  
        //открываем рекордстор   
        DataStorage dataStorage = new DataStorage("MyRecordStore");   
        //  
      //j.DataStorage.deleteAllData() ;  
   
         j.DataStorage.addData("/////////My Recorscore Number 1");//Если закомментировать эту строчку, то ничего не работает  
   
        try {  
               j.DataStorage.Read_All_Records();  
                int N0 = dataStorage.recordStore.getNumRecords();  
               if(N0>0){  
                System.out.println("/////////Amount of recordstere is^"+ N0);                  
               }  
        } catch (Exception ex) {  
            ex.printStackTrace();  
        }  
        try {  
            // Удаление всех данных из RecordStore  
            //dataStorage.deleteAllData();  
   
   
           // notifyDestroyed();  
        } catch (Exception ex) {  
            ex.printStackTrace();  
        }  
    }  
   
    public void pauseApp() {  
        //добавляем строчку к рекрд стор. и закрываемся.  
        j.DataStorage.addData("////////My Recorscore Number 2");  
        j.DataStorage.closeRecordStore_0();  
   
    }  
   
    public void destroyApp(boolean unconditional) {  
        //добавляем строчку к рекрд стор. и закрываеся.  
        j.DataStorage.addData("/////////My Recorscore Number 3");  
        j.DataStorage.closeRecordStore_0();  
   
    //notifyDestroyed();  
    }  
}  
  |  
   22.11.2023 / 00:13 |  |  aNNiMON    Супервизор 
   Сейчас: Offline 
 Имя: Витёк Регистрация: 11.01.2010
   | N0004,  public class Rms {  
    private static RecordStore rmsStore;  
    public static int startsCount = 0;  
    public static String text = "empty";  
   
    public static void saveOptions() {  
        if (rmsStore == null) return;  
        try {  
            ByteArrayOutputStream baos = new ByteArrayOutputStream();  
            DataOutputStream dos = new DataOutputStream(baos);  
            dos.writeInt(startsCount);  
            dos.writeUTF(text);  
            dos.flush();  
            byte[] options = baos.toByteArray();  
            dos.close();  
            try {  
                rmsStore.setRecord(1, options, 0, options.length);  
            } catch (InvalidRecordIDException ridex) {  
                rmsStore.addRecord(options, 0, options.length);  
            }  
        } catch (Exception ex) {  
        } finally {  
            try {  
                rmsStore.closeRecordStore();  
                rmsStore = null;  
            } catch (RecordStoreException ex) {}  
        }  
    }  
   
    public static void restoreOptions() {  
        try {  
            rmsStore = RecordStore.openRecordStore("AppName", true);  
        } catch (RecordStoreException ex) {  
            rmsStore = null;  
        }  
        if (rmsStore != null) {  
            try {  
                DataInputStream dis = new DataInputStream(new ByteArrayInputStream(rmsStore.getRecord(1)));  
                startsCount = dis.readInt();   
                text = dis.readUTF();  
                dis.close();  
            } catch (Exception ex) {}  
        }  
    }  
}  
   
// startApp()  
Rms.restoreOptions();  
System.out.println("Saved text: "+ Rms.text);    
   
// destroyApp  
Rms.startsCount++;  
Rms.text = "Some text";  
Rms.saveOptions();  
 Может так проще будет? Просто после 12 и 40 строки добавлять соответствующие записи и чтения нужных данных.  __________________
   let live  Изменено aNNiMON (22.11 / 00:15) (всего 2 раза) |  
   22.11.2023 / 02:28 |  |  N0004    Пользователь  
   Сейчас: Offline 
 Имя: Arthur Alunts Регистрация: 15.10.2023
   | aNNiMON, можете, пожалуйста, очень прошу мне нужен такой код: При первом запуске мидлета:  
Создал.  
Открыл.  
Добавил 10 записей с текстом "@@@@@".  
Закрыл.   
 При втором запуске и далее всегда.  
Открыл.  
Считал. (Вывел на экран все 10 записей (этих же которые сохранил).)  
2-ю запись сделал "@@@222".  
Закрыл.  
 Это очень просто, но... У меня большие успехи: ничего не получается. Кто нить поможет?   Очень прошу дайте совершенный код.    Изменено N0004 (22.11 / 02:33) (всего 3 раза) |  
   22.11.2023 / 18:04 |  |  aNNiMON    Супервизор 
   Сейчас: Offline 
 Имя: Витёк Регистрация: 11.01.2010
   | N0004,  public class Rms {  
    private static RecordStore rmsStore;  
    public static boolean firstStart = true;  
    public static Vector messages = new Vector();  
   
    public static void saveOptions() {  
        if (rmsStore == null) return;  
        try {  
            ByteArrayOutputStream baos = new ByteArrayOutputStream();  
            DataOutputStream dos = new DataOutputStream(baos);  
            dos.writeBoolean(firstStart);  
            int messagesCount = messages.size();  
            dos.writeInt(messagesCount);  
            for (int i = 0; i < messagesCount; i++) {  
                dos.writeUTF((String) messages.elementAt(i));  
            }  
            dos.flush();  
            byte[] options = baos.toByteArray();  
            dos.close();  
            try {  
                rmsStore.setRecord(1, options, 0, options.length);  
            } catch (InvalidRecordIDException ridex) {  
                rmsStore.addRecord(options, 0, options.length);  
            }  
        } catch (Exception ex) {  
        } finally {  
            try {  
                rmsStore.closeRecordStore();  
                rmsStore = null;  
            } catch (RecordStoreException ex) {}  
        }  
    }  
   
    public static void restoreOptions() {  
        try {  
            rmsStore = RecordStore.openRecordStore("AppName", true);  
        } catch (RecordStoreException ex) {  
            rmsStore = null;  
        }  
        if (rmsStore != null) {  
            try {  
                DataInputStream dis = new DataInputStream(new ByteArrayInputStream(rmsStore.getRecord(1)));  
                firstStart = dis.readBoolean();  
                int messagesCount = dis.readInt();  
                for (int i = 0; i < messagesCount; i++) {  
                    messages.add(dis.readUTF());  
                }  
                text = dis.readUTF();  
                dis.close();  
            } catch (Exception ex) {}  
        }  
    }  
}  
   
// startApp()  
Rms.restoreOptions();  
if (Rms.firstStart) {  
    Rms.messages.add("@@@@@1");  
    Rms.messages.add("@@@@@2");  
    // ...  
    Rms.messages.add("@@@@@10");  
    Rms.firstStart = false;  
} else {  
  for (int i = 0; i < Rms.messages.size(); i++) {  
      System.out.println(Rms.messages.elementAt(i));    
  }  
  Rms.messages.add("@@@222");  
}  
   
// destroyApp  
Rms.saveOptions();  
  __________________
   let live  |  
   23.11.2023 / 00:02 |  |  N0004    Пользователь  
   Сейчас: Offline 
 Имя: Arthur Alunts Регистрация: 15.10.2023
   | aNNiMON, сделал, как ты сказали, плюс добавил String text, и методы destroyApp() startApp(), и туда завернул как показано у Вас.  Но все равно не пашет, красным горит везде, где написано add(). Прикрепил скриншот. Или у Вас нету Эмулятора, чтобы проверить? Можете дать полный совершенный код Мидлета j2me? Вот Ваш код в моей интерпретации, он не работает.   /*  
 * To change this license header, choose License Headers in Project Properties.  
 * To change this template file, choose Tools | Templates  
 * and open the template in the editor.  
 */  
   
package j;  
   
import java.io.ByteArrayInputStream;  
import java.io.ByteArrayOutputStream;  
import java.io.DataInputStream;  
import java.io.DataOutputStream;  
import java.util.Vector;  
   
import javax.microedition.midlet.MIDlet;  
import javax.microedition.rms.InvalidRecordIDException;  
import javax.microedition.rms.RecordStore;  
import javax.microedition.rms.RecordStoreException;  
   
   
   
   
public class Rms extends MIDlet{  
    private static RecordStore rmsStore;  
    public static boolean firstStart = true;  
    public static Vector messages = new Vector();  
    public static String text="";  
    public static void saveOptions() {  
        if (rmsStore == null) return;  
        try {  
            ByteArrayOutputStream baos = new ByteArrayOutputStream();  
            DataOutputStream dos = new DataOutputStream(baos);  
            dos.writeBoolean(firstStart);  
            int messagesCount = messages.size();  
            dos.writeInt(messagesCount);  
            for (int i = 0; i < messagesCount; i++) {  
                dos.writeUTF((String) messages.elementAt(i));  
            }  
            dos.flush();  
            byte[] options = baos.toByteArray();  
            dos.close();  
            try {  
                rmsStore.setRecord(1, options, 0, options.length);  
            } catch (InvalidRecordIDException ridex) {  
                rmsStore.addRecord(options, 0, options.length);  
            }  
        } catch (Exception ex) {  
        } finally {  
            try {  
                rmsStore.closeRecordStore();  
                rmsStore = null;  
            } catch (RecordStoreException ex) {}  
        }  
    }  
   
    public static void restoreOptions() {  
        try {  
            rmsStore = RecordStore.openRecordStore("AppName", true);  
        } catch (RecordStoreException ex) {  
            rmsStore = null;  
        }  
        if (rmsStore != null) {  
            try {  
                DataInputStream dis = new DataInputStream(new ByteArrayInputStream(rmsStore.getRecord(1)));  
                firstStart = dis.readBoolean();  
                int messagesCount = dis.readInt();  
                for (int i = 0; i < messagesCount; i++) {  
                    messages.add(dis.readUTF());  
                }  
                text = dis.readUTF();  
                dis.close();  
            } catch (Exception ex) {}  
        }  
    }  
   
   
   
   
   
    public void startApp() {  
  // startApp()  
   Rms.restoreOptions();  
   if (Rms.firstStart) {  
    Rms.messages.add("@@@@@1");  
    Rms.messages.add("@@@@@2");  
    Rms.messages.add("@@@@@10");  
   
    Rms.firstStart = false;  
}   
  else {  
  for (int i = 0; i < Rms.messages.size(); i++) {  
      System.out.println(Rms.messages.elementAt(i));    
  }  
  Rms.messages.add("@@@222");  
}  
    }  
   
    public void pauseApp() {  
    }  
   
    public void destroyApp(boolean unconditional) {  
  Rms.saveOptions();  
    }  
}  
  Изменено N0004 (23.11 / 00:14) (всего 3 раза)
 Прикрепленные файлы:   2023-11-23_02-5(…).png (122.79 кб.) Скачано 48 раз   |  
   23.11.2023 / 01:33 |  |  N0004    Пользователь  
   Сейчас: Offline 
 Имя: Arthur Alunts Регистрация: 15.10.2023
   | Задача поставлена всё та же: нужен полный код, по RecosdStore: https://annimon.com/forum/post521504Кто может справиться?  Ребят, плиз, помогите.   Изменено N0004 (23.11 / 01:47) (всего 9 раз) |  
    Всего сообщений: 1662  Фильтровать сообщения
  Поиск по теме
  Файлы топика (325) 
                 |