J2ME RMS

package com.j2medev.chapter4;

import javax.microedition.lcdui.*;

public class InputUI extends Form implements ItemStateListener{
   
    private SearchController controller = null;
    private TextField input = new TextField("查询条件:", "", 20, TextField.ANY);

    public InputUI(SearchController controller) {
        super("查询");
        this.controller = controller;
        this.append(input);
        this.setItemStateListener(this);
    }
   
    public void itemStateChanged(Item item){
        if(item == input){
            String data = input.getString();
            String[] result = controller.getResult(data);
            controller.displayResult(result);
        }
    }
}

 package com.j2medev.chapter4;

import javax.microedition.rms.*;

public class RMSHandler {
   
    private RecordStore rs = null;
    //内部类的方式实现SearchFilter,通过比较记录的开始字母决定返回的子集
    private class SearchFilter implements RecordFilter{
        private String query = null;
        public SearchFilter(String query){
            this.query = query;
        }
       
        public boolean matches(byte[] data){
            return new String(data).startsWith(query);
        }  
    }
    //内部类的方式实现SearchComparator,决定返回子集的排列顺序
    private class SearchComparator implements RecordComparator{
       
        public int compare(byte[] data1,byte[] data2){
            int i = new String(data1).compareTo(new String(data2));
            if(i < 0){
                return RecordComparator.FOLLOWS;
            }else if(i == 0){
                return RecordComparator.EQUIVALENT;
            }else if(i > 0){
                return RecordComparator.PRECEDES;
            }
            return i;
        }
    }
    public RMSHandler() {
        openDatabase();
    }
    //打开RecordStore对象
    public void openDatabase(){
        try{
            rs = RecordStore.openRecordStore("search",true);
            if(rs.getNumRecords() <= 0){
                initDatabase();
            }
        }catch(RecordStoreException e){
            e.printStackTrace();
        }
    }
    //初始化RecordStore对象,向其中添加8条记录。
    public void initDatabase(){
        String[] data = new String[]{"h1","h2","c1","c2","m1","m2","d1","d2"};
        try{
            for(int i = 0;i<data.length;i++){
                byte[] array = data[i].getBytes();
                rs.addRecord(array, 0, array.length);
            }
        }catch(RecordStoreException e){
            e.printStackTrace();
        }
    }
    //使用RecordEnumeration来访问记录。
    public String[] getResult(String query){
        try{
            //这里返回的记录是符合SearchComparator的排列顺序并经过SearchFilter筛选的记录
            RecordEnumeration re = rs.enumerateRecords(new SearchFilter(query), new SearchComparator(), false);
            if(re.numRecords() <= 0){
                return null;
            }else{
                String[] result = new String[re.numRecords()];
                int i = 0;
                //循环记录集合放入result数组中
                while(re.hasNextElement()){
                    result[i++] = new String(re.nextRecord());
                }
                return result;
            }
               
        }catch(RecordStoreException e){
            e.printStackTrace();
        }catch(NullPointerException e){
            e.printStackTrace();
        }
        return null;
    } 
}
package com.j2medev.chapter4;

import javax.microedition.lcdui.*;

public class SearchController implements CommandListener{
   
    private SearchMIDlet midlet = null;
    private RMSHandler database = null;
    private Display display = null;
    private InputUI input = new InputUI(this);
    private List result = new List("查询结果",List.IMPLICIT);
    public static final Command backCommand = new Command("返回",Command.BACK,1);
    public static final Command exitCommand = new Command("退出",Command.EXIT,2);
   
    public SearchController(SearchMIDlet midlet) {
        this.midlet = midlet;
        display = Display.getDisplay(midlet);
        database = new RMSHandler();
        input.addCommand(exitCommand);
        input.setCommandListener(this);
        result.addCommand(backCommand);
        result.addCommand(exitCommand);
        result.setCommandListener(this);
        display.setCurrent(input);
    }
   
    public String[] getResult(String query){
        return database.getResult(query);
    }
   
    public void displayResult(String[] queryResult){
        if(queryResult == null){
            queryResult = new String[]{"查询结果为空"};
        }
        result.deleteAll();
        for(int i = 0;i<queryResult.length;i++){
            result.append(queryResult[i],null);
        }
        display.setCurrent(result);
    }
   
    public void commandAction(Command cmd,Displayable displayable){
        if(cmd == backCommand){
            display.setCurrent(input);
        }else if(cmd == exitCommand){
            midlet.exit();
        }
    }
}
package com.j2medev.chapter4;

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class SearchMIDlet extends MIDlet {
   
    private SearchController controller = null;
   
    public void startApp() {
        controller = new SearchController(this);
    }
   
    public void pauseApp() {
    }
   
    public void destroyApp(boolean unconditional) {
    }
   
    public void exit(){
        destroyApp(false);
        notifyDestroyed();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值