首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2ME开发 >

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

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

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接口得到
[解决办法]
学习了

热点排行