0 votes

Utilisation de RecordStore dans Java J2ME

Je suis actuellement en train de faire du développement J2ME. J'ai un problème dans la mesure où un utilisateur peut ajouter et supprimer des éléments dans le magasin d'enregistrements, et si un enregistrement est supprimé, il reste vide et les autres n'avancent pas. J'essaie de créer une boucle qui vérifiera si un enregistrement contient quelque chose (au cas où il aurait été supprimé) et si c'est le cas, je veux ajouter le contenu de cet enregistrement à une liste. Mon code est similaire à ce qui suit :

      for (int i = 1; i <= rs.getNumRecords(); i++)
      {
        // Re-allocate if necessary

        if (rs.getRecordSize(i) > recData.length)
          recData = new byte[rs.getRecordSize(i)];
        len = rs.getRecord(i, recData, 0);
        st = new String(recData, 0, len);
        System.out.println("Record #" + i + ": " + new String(recData, 0, len));
        System.out.println("------------------------------");
        if(st != null)
        {
            list.insert(i-1, st, null);
        }

      }

Lorsqu'il arrive à rs.getRecordSize(i), j'obtiens toujours un message "javax.microedition.rms.InvalidRecordIDException : error finding record". Je sais que cela est dû au fait que l'enregistrement est vide, mais je ne vois pas comment contourner ce problème.

Toute aide serait très appréciée.

Merci d'avance.

6voto

kgiannakakis Points 62727

Vous devez utiliser une RecordEnumeration pour visiter les enregistrements :

RecordEnumeration renum = rs.enumerateRecords(null, null, false);
while (renum.hasNextElement())
{
    int index = renum.nextRecordId();
    if (store.getRecordSize(index) == STORE_LEN)
    {

    }
}

Vous ne pouvez pas compter sur le recordId pour quoi que ce soit d'utile. Utilisez une technique différente pour réattribuer un enregistrement supprimé.

1voto

Pepe Points 11

Pour que vos dossiers vraiment supprimé vous devez fermer de RecordStore. La manière correcte de faire fonctionner un RecordStore est de l'ouvrir, de l'utiliser et enfin de le fermer. J'espère que cela vous sera utile

0voto

hsmit Points 1693

Vous pouvez essayer d'utiliser la méthode suivante :

 /**
 * checks if record i is a valid records
 * @param i (recordId
 * @return true/false
 */
public boolean isValidRecord(int id) {

    try {
        recordStore.getRecordSize(id);
        return true;
    } catch (RecordStoreNotOpenException e1) {
        e1.printStackTrace();
        return false;
    } catch (InvalidRecordIDException e1) {
        //e1.printStackTrace(); //this printStackTrace is hidden on purpose: the error is in fact used to find out if the record id is valid or not.
        return false;
    } catch (RecordStoreException e1) {
        e1.printStackTrace();
        return false;
    }

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X