当前位置: 代码迷 >> J2ME >> RecordStore的有关问题:在netbean里面运行和在外面用 手机顽童运行结果不一样.
  详细解决方案

RecordStore的有关问题:在netbean里面运行和在外面用 手机顽童运行结果不一样.

热度:1310   发布时间:2013-02-25 21:34:36.0
RecordStore的问题:在netbean里面运行和在外面用 手机顽童运行结果不一样...
RecordStore的问题:在netbean里面运行和在外面用 手机顽童运行结果不一样...
读取file.txt和JavaPowered.png这两个文件然后显示
第一次运行正常,然后我手动修改了这两个文件,在运行,结果竟然还是一样的
但是退出netbeans之后用手机顽童去运行那个jar,结果就是改变后的txt文本和图片了
why????????
Java code
package com.j2medev.chapter4;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.UnsupportedEncodingException;import javax.microedition.lcdui.Image;import javax.microedition.rms.*;public class Database {        public static final String DATABASE_NAME = "database";    private RecordStore rs = null;    private boolean empty = true;     public Database() {        openDatabase();    }        private void openDatabase(){        try{            rs = RecordStore.openRecordStore(DATABASE_NAME,true);            if(rs.getNumRecords() > 0){                //记录存储中已经有数据                empty = false;                populateDatabase();            }else{                //初始化数据内容,向RecordStore中写入图片和文本                populateDatabase();            }        }catch(RecordStoreException e){            e.printStackTrace();        }    }    //向记录存储中写入图片和文本数据    private void populateDatabase(){        try{            initFile("file.txt");            initFile("JavaPowered.png");        }catch(IOException e){            e.printStackTrace();        }catch(RecordStoreException ex){            ex.printStackTrace();        }    }        private void initFile(String fileName) throws IOException,RecordStoreException{        InputStream is = this.getClass().getResourceAsStream("/"+fileName);        if(is != null){            ByteArrayOutputStream baos = new ByteArrayOutputStream();            //创建缓冲区用于读取数据,如果一个字节一个字节读取效率很低。            byte[] data = new byte[1024];            int ch = 0;            while((ch = is.read(data, 0,data.length))!=-1){                baos.write(data, 0, ch);            }            byte[] array = baos.toByteArray();            //添加记录            rs.addRecord(array, 0, array.length);            is.close();            baos.close();         }    }        public boolean isEmpty(){        return this.empty;    }        public Image getImage(){        try{            //这里硬编码,我们已知图片记录的recordId是2            byte[] img = rs.getRecord(2);            return Image.createImage(img, 0,img.length);        }catch(RecordStoreException e){            e.printStackTrace();        }        return null;    }        public String getText(){        try{             //这里硬编码,我们已知文本记录的recordId是1            byte[] text = rs.getRecord(1);            //解决中文问题,使用UTF-8编码            return new String(text,"UTF-8"  );        }catch(RecordStoreException e){            e.printStackTrace();        }catch(IOException ex){            ex.printStackTrace();        }        return null;    }}


------解决方案--------------------------------------------------------
是不是编码格式的问题?
------解决方案--------------------------------------------------------
addRecord的问题,每次调用,recordId加1,不可逆,删掉这个记录,id号仍然存在,于是

你第一次的时候写入的是1、2,这时你改了图片和txt,再次add写入的是3、4号,但你取的仍然是1、2。

放到另外一个编译模拟环境的时候初始RecordStore是没有内容,你第一次添加东西是可以取到正确的值的,再来一次就不行了。
------解决方案--------------------------------------------------------
setRecord

记录号可以用RecordEnumeration接口得到
------解决方案--------------------------------------------------------
学习了