Исправления исходников (1-ый пост) 4.12.2018 / 20:38 | | Vlad_jonson Пользователь Сейчас: Online
Имя: Владислав Откуда: Киев Регистрация: 09.08.2014
| Aladdin, Спасибо |
9.12.2018 / 19:22 | | Vlad_jonson Пользователь Сейчас: Online
Имя: Владислав Откуда: Киев Регистрация: 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 кб.) Скачано 40 раз |
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)
|