⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cardcase.java

📁 J2ME程序设计实例教程的源码
💻 JAVA
字号:
import javax.microedition.pim.*;
import javax.microedition.lcdui.*;
import java.util.Vector;
import java.util.Enumeration;
import java.util.Date;

/**
 * Cardcase类描述了名片盒,为视图提供了访问设备联系人列表的所有方法。
 */
public class Cardcase {
    private ContactList[] lists;    //设备中所有的联系人列表
    
    //构造方法,创建一个名片盒对象
    public Cardcase() throws PIMException {
        PIM pim = PIM.getInstance();
        String[] listNames = pim.listPIMLists(PIM.CONTACT_LIST);
        lists = new ContactList[listNames.length];
        for(int i=0; i<lists.length; i++) {//打开设备中所有联系人列表
            lists[i] = (ContactList)pim.openPIMList(PIM.CONTACT_LIST, 
                                                    PIM.READ_WRITE, listNames[i]);
        }
    }
    
    //释放资源
    public void release() throws PIMException {
        for(int i=0; i<lists.length; i++) {//关闭设备中所有联系人列表
            lists[i].close(); 
        }
    }
    
    //返回card名片支持的所有字段
    public int[] getSupportedFields(Contact card) {
        return card.getPIMList().getSupportedFields();
    }
    
    //返回card名片使用的字段
    public int[] getUsedFields(Contact card) {
        return card.getFields();
    }
    
    //返回card名片没有使用的字段
    public int[] getUnusedFields(Contact card) {
        int[] supportedFields = card.getPIMList().getSupportedFields();
        int[] usedFields = card.getFields();
        int[] unusedFields = new int[supportedFields.length-usedFields.length];
        
        int j=0;
        for(int i=0; i<supportedFields.length; i++) {
            if(card.countValues(supportedFields[i]) == 0) { //未使用的字段
                unusedFields[j++] = supportedFields[i];
            }
        }
        return unusedFields;
    }
    
    //返回card名片中fieldCode字段的标签
    public String getFieldLabel(Contact card, int fieldCode) {
        return card.getPIMList().getFieldLabel(fieldCode);
    }
    
    //返回card名片中fieldCode字段的类型
    public int getFieldType(Contact card, int fieldCode) {
        return card.getPIMList().getFieldDataType(fieldCode);
    }
    
    //返回card名片中fieldCode字符串数组字段的元素索引
    public int[] getArrayElementIndices(Contact card, int fieldCode) {
        return card.getPIMList().getSupportedArrayElements(fieldCode);
    }
    
    //返回card名片中fieldCode字符串数组字段的elemIndex元素的标签
    public String getArrayElementLabel(Contact card, int fieldCode, int elemIndex) {
        return card.getPIMList().getArrayElementLabel(fieldCode, elemIndex);
    }
    
    //返回card名片的标签
    public String getCardLabel(Contact card) {
        int displayField = Contact.FORMATTED_NAME;
        String label = null;
        if(card.getPIMList().isSupportedField(displayField)) {
            boolean defined = true;
            if(card.countValues(displayField) == 0) {
                defined = false;
            } 
            else {
                String s = card.getString(displayField, 0);
                if(s.trim().length() <= 0) {
                    defined = false;
                }
            }
            if(!defined) {
                fixDisplayLabel(card, displayField);
            }
            
            if(card.countValues(displayField) > 0) {
                String s = card.getString(displayField, 0);
                if(s.trim().length() > 0) {
                    label = s;
                }
            }
        }
        
        if(label == null) {
            label = "<不完整的名片>";
        }
        
        return label;
    }
    
    //为card名片设置一个标签
    private void fixDisplayLabel(Contact card, int displayField) {
        if(card.getPIMList().isSupportedField(Contact.NAME)) {
            if(card.countValues(Contact.NAME) != 0) {
                String[] na = card.getStringArray(Contact.NAME, 0);
                if(na != null) {
                    StringBuffer sb = new StringBuffer();
                    if(na[Contact.NAME_GIVEN] != null) {
                        sb.append(na[Contact.NAME_FAMILY]);
                    }
                            
                    if(na[Contact.NAME_GIVEN] != null) {
                        if(sb.length() > 0) {
                            sb.append(" ");
                        }
                        sb.append(na[Contact.NAME_FAMILY]);
                    }
                    String s = sb.toString().trim();
                    if(s.length() > 0) {
                        if(card.countValues(displayField) == 0) {
                            card.addString(displayField, Contact.ATTR_NONE, s);
                        }
                        else {
                            card.setString(displayField, 0, Contact.ATTR_NONE, s);
                        }
                    }
                }
            }
        }
    }
    
    //返回设备中所有联系人列表的名字
    public String[] getAllMemoryName() {
        String[] names = new String[lists.length];
        for(int i=0; i<names.length; i++) {
            names[i] = lists[i].getName();
        }
        
        return names;
    }
    
    //使用memoryName联系人列表中创建一个名片
    public Contact createCard(String memoryName) {
        int i=0;
        while(i<lists.length && 
                !lists[i].getName().equals(memoryName)) {
            i++;
        }
        
        Contact card = null;
        if(i<lists.length) {
            card = lists[i].createContact();    //创建名片
            if(lists[i].isSupportedField(Contact.FORMATTED_NAME)) { //添加字段
                card.addString(Contact.FORMATTED_NAME, PIMItem.ATTR_NONE, "");
            }
        }
        
        return card;
    }
    
    //返回名片盒中所有的名片
    public Vector getCards() throws PIMException {
        Vector v = new Vector();
        for(int i=0; i<lists.length; i++) {
            Enumeration e = lists[i].items();
            while(e.hasMoreElements()) {
                v.addElement(e.nextElement());
            }
        }
        
        return v;
    }
    
    //返回名片盒中category组中的名片
    public Vector getCards(String category) throws PIMException {
        Vector v = new Vector();
        for(int i=0; i<lists.length; i++) {
            Enumeration e = lists[i].itemsByCategory(category);
            while(e.hasMoreElements()) {
                v.addElement(e.nextElement());
            }
        }
        return v;
    }
    
    //删除名片card
    public void removeCard(Contact card) throws PIMException {
        ((ContactList)card.getPIMList()).removeContact(card);
    }
    
    //返回所有的名片组
    public String[] getCategories() throws PIMException {
        Vector v = new Vector();
        for(int i=0; i<lists.length; i++) {
            String[] categories = lists[i].getCategories();
            for(int j=0; j<categories.length; j++) {
                if(!v.contains(categories[j])) {
                    v.addElement(categories[j]);
                }
            }
        }
        
        String[] categories = new String[v.size()];
        v.copyInto(categories);
        
        return categories;
    }
    
    //把card名片添加到category名片组中
    public void addCardToCategory(Contact card, String category) throws PIMException {
        String[] categories = card.getCategories();
        int i=0;
        while(i<categories.length && !category.equals(categories[i])) {
            i++;
        }
        
        if(i>= categories.length) {
            card.addToCategory(category);
            card.commit();
        }
    }
    
    //删除
    public void deleteCardFromCategory(Contact card, String category) throws PIMException {
        card.removeFromCategory(category);
        card.commit();
    }
    
    //把字符串数组中的元素连接成一个字符串
    public String joinStringArray(String[] a) {
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < a.length; i++) {
            if (a[i] != null && a[i].length() > 0) {
                if (sb.length() > 0) {
                    sb.append(", ");
                }
                sb.append(a[i]);
            }
        }
        return sb.toString();
    }
    
    //创建名片组name
    public void addCategory(String name) throws PIMException {
        for(int i=0; i<lists.length; i++) {
            lists[i].addCategory(name);
        }
    }
    
    //删除名片组name,containItem表示是否同时删除组中的名片
    public void deleteCategory(String name, boolean containItem) throws PIMException {
        for(int i=0; i<lists.length; i++) {
            lists[i].deleteCategory(name, containItem);
        }
    }
    
    //把fieldCode字段添加到card名片中
    public void addFieldToCard(Contact card, int fieldCode) {
        int fieldType = getFieldType(card, fieldCode);
        switch(fieldType) {
            case Contact.STRING: {
                card.addString(fieldCode, PIMItem.ATTR_NONE, "");
                break;
            }
            case Contact.INT: {
                card.addInt(fieldCode, PIMItem.ATTR_NONE, 0);
                break;
            }
            case Contact.DATE: {
                long time = (new Date()).getTime();
                card.addDate(fieldCode, PIMItem.ATTR_NONE, time);
                break;
            }
            case Contact.BOOLEAN: {
                card.addBoolean(fieldCode, PIMItem.ATTR_NONE, false);
                break;
            }
            case Contact.STRING_ARRAY: {
                int[] supperArrElement = getArrayElementIndices(card, fieldCode);
                int size = 0;
                for(int i=0; i<supperArrElement.length; i++) {
                    size = Math.max(size, supperArrElement[i]+1);
                }
                String[] a = new String[size];
                for(int i=0; i<a.length; i++) {
                    a[i] = "";
                }
                card.addStringArray(fieldCode, PIMItem.ATTR_NONE, a);
                break;
            }
            case Contact.BINARY: {
                card.addBinary(fieldCode, PIMItem.ATTR_NONE, new byte[16], 0, 16);
                break;
            }
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -