2010-03-22 28 views
0

Je suis actuellement en train de faire du développement J2ME. J'ai un problème en ce qu'un utilisateur peut ajouter et supprimer des éléments au magasin d'enregistrements, et si un enregistrement est supprimé, alors cet enregistrement est laissé vide et les autres ne montent pas un. J'essaie de trouver une boucle qui va vérifier si un enregistrement contient quelque chose (en cas de suppression) et si c'est le cas, je veux ajouter le contenu de cet enregistrement à une liste. Mon code est similaire à ce qui suit:Utilisation de RecordStore en Java J2ME

 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); 
     } 

     } 

Quand il arrive à rs.getRecordSize (i), je reçois toujours un "javax.microedition.rms.InvalidRecordIDException: erreur de trouver record". Je sais que c'est dû au fait que le disque soit vide mais je ne peux pas trouver un moyen de contourner ce problème.

Toute aide serait grandement appréciée.

Merci d'avance.

+3

7 questions, 0 réponses acceptées et 0 votes. Cela ne semble pas bien. –

Répondre

6

Vous devez utiliser un RecordEnumeration pour visiter les archives:

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 RECORDID pour quelque chose d'utile. Utilisez une technique différente pour réaffecter un enregistrement supprimé.

+0

Qu'est-ce que STORE_LEN? – me123

+0

C'est la longueur de l'enregistrement. Votre application devrait savoir à ce sujet. Je l'utilise pour différencier les différents enregistrements. Bien sûr, vous n'êtes pas obligé de faire la même chose. L'idée est que vous utilisez l'énumération, obtenez l'index avec nextRecordId et ensuite la taille avec getRecordSize. – kgiannakakis

0

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; 
    } 

} 
1

Afin d'avoir vos dossiers vraiment supprimé, vous devez fermer de RecordStore. La façon correcte d'exploiter un RecordStore est de l'ouvrir, en l'utilisant et en le fermant définitivement. J'espère que ceci est utile pour vous