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

📄 phonebook.java

📁 These notes are only intended as a brief guide for building and running the example.
💻 JAVA
字号:
//
// Copyright 2002 Nokia Corporation.
//
// THIS SOURCE CODE IS PROVIDED 'AS IS', WITH NO WARRANTIES WHATSOEVER,
// EXPRESS OR IMPLIED, INCLUDING ANY WARRANTY OF MERCHANTABILITY, FITNESS
// FOR ANY PARTICULAR PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE
// OR TRADE PRACTICE, RELATING TO THE SOURCE CODE OR ANY WARRANTY OTHERWISE
// ARISING OUT OF ANY PROPOSAL, SPECIFICATION, OR SAMPLE AND WITH NO
// OBLIGATION OF NOKIA TO PROVIDE THE LICENSEE WITH ANY MAINTENANCE OR
// SUPPORT. FURTHERMORE, NOKIA MAKES NO WARRANTY THAT EXERCISE OF THE
// RIGHTS GRANTED HEREUNDER DOES NOT INFRINGE OR MAY NOT CAUSE INFRINGEMENT
// OF ANY PATENT OR OTHER INTELLECTUAL PROPERTY RIGHTS OWNED OR CONTROLLED
// BY THIRD PARTIES
//
// Furthermore, information provided in this source code is preliminary,
// and may be changed substantially prior to final release. Nokia Corporation
// retains the right to make changes to this source code at any time,
// without notice. This source code is provided for informational
// purposes only.

//
// Nokia and Nokia Connecting People are registered trademarks of Nokia
// Corporation. Java and all Java-based marks are trademarks or registered
// trademarks of Sun Microsystems, Inc. Other product and company names
// mentioned herein may be trademarks or trade names of their respective owners.

// A non-exclusive, non-transferable, worldwide, limited license is hereby
// granted to the Licensee to download, print, reproduce and modify the
// source code. The licensee has the right to market, sell, distribute and
// make available the source code in original or modified form only when
// incorporated into the programs developed by the Licensee. No other
// license, express or implied, by estoppel or otherwise, to any other
// intellectual property rights is granted herein.
//


import javax.microedition.rms.*;
import java.util.*;


class PhoneBook
{
    private final static String RSNAME = "phonebook";
    private final static char DELIMITER = '|';

    private static PhoneBook phoneBook;
    private static Vector names = new Vector();
    private static Vector phones = new Vector();


    static PhoneBook getPhoneBook()
    {
        if (phoneBook == null)
        {
            phoneBook = new PhoneBook();
        }
        return phoneBook;
    }


    private PhoneBook()
    {
        try
        {
            RecordStore rs = RecordStore.openRecordStore(RSNAME, true);
            int peerNum = rs.getNumRecords();

            for (int i = 0; i < peerNum; i++)
            {
                byte[] byteRec = rs.getRecord(i + 1);
                String peer = new String(byteRec);

                names.addElement(peer.substring(0, peer.indexOf(DELIMITER)));
                phones.addElement(peer.substring(peer.indexOf(DELIMITER) + 1));
            }
            rs.closeRecordStore();
        }
        catch (RecordStoreException e)
        {
            ErrorScreen.showError("Open RMS Error");
        }
    }


    synchronized String getName(String phoneNumber)
    {
        int index = phones.indexOf(phoneNumber);

        return (index != -1) ? (String) names.elementAt(index) : null;
    }


    synchronized String getPhoneNumber(String name)
    {
        int index = names.indexOf(name);

        return (index != -1) ? (String) phones.elementAt(index) : null;
    }


    synchronized String[] getNames()
    {
        String[] names = null;

        if (this.names.size() > 0)
        {
            names = new String[this.names.size()];
            this.names.copyInto(names);
        }
        return names;
    }


    synchronized String[] getNames(String[] phones)
    {
        String[] names = new String[phones.length];

        for (int i = 0; i < names.length; i++)
        {
            names[i] = getName(phones[i]);
        }
        return names;
    }


    synchronized String validate(String peerName, String peerAddress)
    {
        int i;
        String name = null;
        String peerNum = (peerAddress.indexOf(':') == -1) ?
            peerAddress :
            peerAddress.substring(0, peerAddress.indexOf(':'));

        for (i = 0; i < phones.size(); i++)
        {
            String phoneNumber = (String) phones.elementAt(i);
            String phoneNum = (phoneNumber.indexOf(':') == -1) ?
                phoneNumber :
                phoneNumber.substring(0, phoneNumber.indexOf(':'));


            // Only simple string-based matching of the phone numbers is
            // performed below. More advanced matching based on the 'number
            // structure' or 'numbering plan' of phone numbers is not
            // performed. Specifically, we do not check if a phone number
            // string using global number structure (e.g. "+3585012345"),
            // matches a previously saved phone number that used a local
            // structure within some geographic area (e.g. "05012345"
            // dialed within Finland).

            if (peerNum.equals(phoneNum))
            {
                name = (String) names.elementAt(i);
                update(name, peerAddress);
                break;
            }
        }

        if (i == phones.size())
        {
            // new peer
            for (i = 0; i < names.size(); i++)
            {
                name = (String) names.elementAt(i);
                if (peerName.toLowerCase().equals(name.toLowerCase()))
                { // name exists, use name' instead
                    name = peerName + '\'';
                    update(name, peerAddress);
                    break;
                }
            }

            if (i == names.size())
            {
                // brand new, save to rms
                update(peerName, peerAddress);
                name = peerName;
            }
        }

        return name;
    }


    synchronized void update(String peerName, String peerAddress)
    {
        String peername = peerName.toLowerCase();

        int i;

        for (i = 0; i < names.size(); i++)
        {
            String name = ((String) names.elementAt(i)).toLowerCase();
            String phoneNumber = (String) phones.elementAt(i);

            if (peername.equals(name) || peerAddress.equals(phoneNumber))
            {
                if (peername.equals(name) && peerAddress.equals(phoneNumber))
                {
                    return;
                }
                names.setElementAt(peerName, i);
                phones.setElementAt(peerAddress, i);
                break;
            }
        }

        if (i == names.size())
        {
            names.insertElementAt(peerName, 0);
            phones.insertElementAt(peerAddress, 0);
        }
        updateRecordStore();
    }


    synchronized void removeEntries(String[] peerNames)
    {
        for (int i = 0; i < peerNames.length; i++)
        {
            int index = names.indexOf(peerNames[i]);

            names.removeElementAt(index);
            phones.removeElementAt(index);
        }
        updateRecordStore();
    }


    synchronized void updateRecordStore()
    {
        try
        {
            RecordStore.deleteRecordStore(RSNAME);

            RecordStore rs = RecordStore.openRecordStore(RSNAME, true);

            for (int i = 0; i < names.size(); i++)
            {
                String peer = (String) names.elementAt(i) + DELIMITER +
                    (String) phones.elementAt(i);

                rs.addRecord(peer.getBytes(), 0, peer.length());
            }

            rs.closeRecordStore();
        }
        catch (RecordStoreException e)
        {
            ErrorScreen.showError("Update RMS Error!");
        }

        return;
    }
}

⌨️ 快捷键说明

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