Midlet, RecordStore i dobranie się do id rekordu.

0

Cześć,

Piszę midlet, którego zadaniem jest wprowadzanie, oglądanie, modyfikacja i kasowanie danych osobowych. Stworzyłem menu oraz przeglądanie wprowadzonych danych w formie listy. Mam za zadanie usunięcie i modyfikację rekordu danych, ale i jedno i drugie wymaga dobrania się do ID rekordu. Jak mam to zrobić? Chciałbym użyć metod: deleteRecord(int id) oraz setRecord. Chciałbym, aby po wybraniu opcji KASUJ zaznaczony rekord się wykasował, ale jak mam pobrać jego id?

0

Ktokolwiek pomoże?

0

Niestety musisz podać więcej szczegółów. Czym jest u Ciebie rekord? Jakie ma pola, gdzie go trzymasz i jaki jest związek obiektów tej klasy z tym, co wyświetlasz? Gdzie też miałaby się znaleźć opcja "kasuj"? Jeśli listener tego przycisku wie, dla którego elementu listy został wywołany, a na liście są elementy (a nie np. stringi na ich podstawie), to nie widzę problemu: deleteRecord(wybrany_element.getId());
Domyślam się jednak, że coś nakombinowałeś, więc musisz podzielić się kodem.

0

To jest klasa tworząca rekord (tablicę byte[]):

final class SimpleRecord {

private final static int IMIE_INDEX = 0;
private final static int NAZW_INDEX = 40;
private final static int NR_INDEX = 80;
private final static int DATA_INDEX = 120;

private final static int FIELD_LEN = 40;

public final static int MAX_REC_LEN = 160; 

private static StringBuffer recBuf = new StringBuffer(MAX_REC_LEN);

private static void clearBuf() {
	for(int i = 0; i < MAX_REC_LEN; i++)
		recBuf.insert(i, ' ');
	recBuf.setLength(MAX_REC_LEN);
}

public static byte[] createRecord(String im, String nazw, String nr, String data) {
	
	clearBuf();
	
	recBuf.insert(IMIE_INDEX, im);
	recBuf.insert(NAZW_INDEX, nazw);
	recBuf.insert(NR_INDEX, nr);
	recBuf.insert(DATA_INDEX, data);
	
	recBuf.setLength(MAX_REC_LEN);
	
	return recBuf.toString().getBytes();
	
}

public static String getImie(byte[] b) {
	return new String(b, IMIE_INDEX, FIELD_LEN).trim();
}

public static String getNazwisko(byte[] b) {
	return new String(b, NAZW_INDEX, FIELD_LEN).trim();
}

public static String getNr(byte[] b) {
	return new String(b, NR_INDEX, FIELD_LEN).trim();
}

public static String getData(byte[] b) {
	return new String(b, DATA_INDEX, FIELD_LEN).trim();
}

}

Ja nie mam żadnej opcji getID().

Opcja kasuj miałaby się znaleźć na liście 'przeglądanych' i kasować element, dla którego została wywołana.

0

Jak powiesz mi gdzie znajdę opcję getID() to mi już wystarczy.

0

Najwyraźniej się nie zrozumieliśmy. To są rekordy, które wyświetlasz na liście (swoją drogą... tablica bajtów na podstawie Stringów? Poważnie?) ? Chcesz wykonać NA LIŚCIE operację np. deleteRecord(id), która usunie z listy element o wskazanym id? Jeśli tak, to chodzi o informację, który z kolei na liście jest obiekt, który z niej usuwasz. np. zakładając listę numerową od 0: {Irek, Staszek, Maniek}, usuwając Mańka chcesz wykonać deleteRecord(2) i potrzebujesz tej dwójki?
Jeśli tak, to jest kilka opcji. Użytkownik wybiera przycisk obok odpowiedniego rekordu, a każdy przycisk ma przypisane ID, które usuwa LUB użytkownik jakoś zaznacza Mańka i naciska "usuń", a wtedy to zaznaczenie musi być jakąś checklistą, która powie, który z kolei element został usunięty. Jest jeszcze opcja nr 3. Wiesz, że chcesz usunąć Mańka, ale wiesz, który ma numer. Iterujesz wtedy po liście zwykłym forem i sprawdzasz, czy dany element, to Maniek. Jak trafisz na niego, to masz numerek do metody deleteRecord(id). Ogólnie same pokręcone konstrukcje, ale będą skuteczne.

0

Hehe dokładnie tak zrobiłem (iterowałem enumeratorem). Myślałem, że jest jakaś prostsza możliwość.
Dzięki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1