Computer/J2ME for GSM

RecordStore close 문제 해결

holycall 2004. 12. 14. 11:41

Nokia 3100 기종에서는 RecordStore를 닫지 않으면 저장이 안된다.

open/close 짝이 맞아야 하고 끝나기 전에 반드시 닫아야 한다.

따라서 되도록 열고 나서 빨리 닫는 것이 좋은데

반드시 닫히는 것을 보장하기 위해서 try - catch - finally 구문을 이용하면 좋다.

예를 들면

 

    void saveOption() {
        try {
            RecordStore optionStore = RecordStore.openRecordStore("GGoption", true);
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            DataOutputStream dos = new DataOutputStream(bos);
            dos.writeBoolean(soundSetting);
            dos.writeBoolean(vibrationSetting);
            byte abyte0[] = bos.toByteArray();
            if (optionStore.getNumRecords() == 0)
                optionStore.addRecord(abyte0, 0, abyte0.length);
            else
                optionStore.setRecord(1, abyte0, 0, abyte0.length);
            dos.close();            
            optionStore.closeRecordStore();
        } catch (Exception e) {
        }
    }

 

보통 이렇게 하는데 close가 더 확실한 보장을 위해서

 

    void saveOption() {
        try {
            RecordStore optionStore = RecordStore.openRecordStore("GGoption", true);
            try {
                ByteArrayOutputStream bos = new ByteArrayOutputStream();
                DataOutputStream dos = new DataOutputStream(bos);
                dos.writeBoolean(soundSetting);
                dos.writeBoolean(vibrationSetting);
                byte abyte0[] = bos.toByteArray();
                if (optionStore.getNumRecords() == 0)
                    optionStore.addRecord(abyte0, 0, abyte0.length);
                else
                    optionStore.setRecord(1, abyte0, 0, abyte0.length);
                dos.close();
            } catch (Exception e) {
            } finally {
                optionStore.closeRecordStore();
            }
        } catch (Exception e) {
        }
    }

 

이런 식으로 try가 하나 더 감싸게 하고,

finally를 이용해 optionStore를 반드시 닫도록 하는 것이다.

finally는 문법상으로 강제 종료를 하더라도 반드시 실행하도록 되어 있기 때문에

좀 더 안정적이지 않을까 하는 것이다.