2010-03-22 5 views
0

현재 J2ME 개발 중입니다. 사용자가 레코드 저장소에 요소를 추가 및 제거 할 수 있고 레코드가 삭제되면 해당 레코드는 비어 있고 다른 레코드는 위로 이동하지 않는다는 점에서 문제가 있습니다. 레코드에 내용이 있는지 (삭제 된 경우) 확인하고 그 결과 레코드의 내용을 목록에 추가하려는 루프가 있습니다. 내 코드는 다음과 유사합니다Java에서 RecordStore 사용 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); 
     } 

     } 

는 (i)를 rs.getRecordSize에 도착, 난 항상 "javax.microedition.rms.InvalidRecordIDException을 : 오류 기록을 찾아"얻는다. 이것은 비어있는 레코드 때문에 발생하는 것으로 알고 있지만이 문제를 해결할 방법을 생각할 수는 없습니다.

도움을 주시면 감사하겠습니다.

미리 감사드립니다.

+3

7 질문, 0 대답 및 0 표. 그것은 좋지 않다. –

답변

6

당신은 기록을 방문하기 위해 RecordEnumeration을 사용한다 :

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

    } 
} 

당신은 아무것도 유용의 recordId를에 의존 할 수 없다. 다른 기술을 사용하여 삭제 된 레코드를 재 할당하십시오.

+0

STORE_LEN이란 무엇입니까? – me123

+0

레코드의 길이입니다. 귀하의 응용 프로그램은 그것에 대해 알아야합니다. 다른 레코드를 구별하는 데 사용합니다. 물론 당신은 똑같이 할 필요가 없습니다. 아이디어는 열거 형을 사용하고, nextRecordId로 인덱스를 가져온 다음 getRecordSize로 크기를 가져 오는 것입니다. – kgiannakakis

0
다음과 같은 방법을 사용하려고 할 수

: 이 진정으로 당신이 드에서 RecordStore를 닫가 삭제 귀하의 기록을 위해

/** 
* 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

합니다. RecordStore를 작동시키는 올바른 방법은 그것을 열어 마지막으로 그것을 닫는 것입니다. 희망이 당신에게 유용합니다