`
roruby
  • 浏览: 341982 次
  • 来自: ...
社区版块
存档分类
最新评论

应用RMS实现用户自动登陆功能

阅读更多

    MIDP的子系统Record Management System提供了MIDlet的持久性存储,精通MIDP子系统RMS系列文章对其使用进行了详细介绍。本文讲述如何使用RMS提供的功能实现应用程序的定制功能——自动登陆。

    我们的设计思路非常简单,在RecordStore中存储用户的设置和用户的信息(用户名和密码),如果用户选择自动登陆的话,那么下次当用户想联网的时候将跳过登陆界面,系统会从RecordStore中读取用户和密码,经过服务器的验证后转入到适当的界面。我对整个程序进行了简化,我们不进行联网,对信息的存储也都从简,只是为了说明RMS实现应用程序定制的思路,因此给出的代码并没有全面测试和优化。下面是程序的截图

   

 

 

 

 

 

 

     我们用Account和Preference分别存储用户信息和用户的个性化设置,同样在这两个类中提供序列化的方法,这样方便我们从RecordStore中读取和写入。这里只给出Preference类的代码,Account类似。
package com.j2medev.autologin;

import java.io.*;

public class Preference
{
    private boolean autoLogin;

    public Preference(boolean _autoLogin)
    {
        this.autoLogin = _autoLogin;
    }

    public Preference()
    {
    }

    public void serialize(DataOutputStream dos) throws IOException
    {
        dos.writeBoolean(autoLogin);
    }

    public static Preference deserialize(DataInputStream dis)
            throws IOException
    {
        Preference preference = new Preference();
        preference.setAutoLogin(dis.readBoolean());

        return preference;
    }

    public boolean isAutoLogin()
    {
        return autoLogin;
    }

    public void setAutoLogin(boolean autoLogin)
    {
        this.autoLogin = autoLogin;
    }
}

    我们需要一个Model类来处理读取和写入RecordStore数据的逻辑,它也非常简单。为了简化程序我们规定首先写入Account然后写入Preference,这样我们读取的时候只要通过recordID分别为1和2来读取了,在实际使用的时候通常会比较复杂,我们要借助过滤器等查找,可以参考我的基于MIDP1.0实现个人通讯录。

package com.j2medev.autologin;

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


public class Model
{
    private RecordStore accountStore;
    public static final String RNAME = "accountstore";

    public Model()
    {
        try
        {
            accountStore = RecordStore.openRecordStore(RNAME, true);
        } catch (RecordStoreException e)
        {
            e.printStackTrace();
        }
    }

    public void closeRecordStore()
    {
        try
        {
            accountStore.closeRecordStore();
        } catch (RecordStoreException e)
        {
            e.printStackTrace();
        }
    }

    public void saveAccount(Account account)
    {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        DataOutputStream dos = new DataOutputStream(baos);
        try
        {
            account.serialize(dos);
            byte[] data = baos.toByteArray();
            accountStore.addRecord(data, 0, data.length);
            baos.close();
        } catch (IOException e)
        {
            e.printStackTrace();
        } catch (RecordStoreException e)
        {
            e.printStackTrace();
        }

    }

    public Account getAccount(int recordID)
    {

        try
        {
            if (accountStore.getNumRecords() > 0)
            {
                byte[] data = accountStore.getRecord(recordID);
                ByteArrayInputStream bais = new ByteArrayInputStream(data);
                DataInputStream dis = new DataInputStream(bais);
                Account account = Account.deserialize(dis);
                bais.close();
                return account;
            }
            return null;

        } catch (IOException e)
        {
            return null;
        } catch (RecordStoreException e)
        {
            return null;
        }
    }

    public void savePreference(Preference preference)
    {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        DataOutputStream dos = new DataOutputStream(baos);
        try
        {
            preference.serialize(dos);
            byte[] data = baos.toByteArray();
            accountStore.addRecord(data, 0, data.length);
            baos.close();
           
        } catch (IOException e)
        {
            e.printStackTrace();
        } catch (RecordStoreException e)
        {
            e.printStackTrace();
        }

    }

    public Preference getPreference(int recordID)
    {
        try
        {
            if (accountStore.getNumRecords() > 0)
            {
                byte[] data = accountStore.getRecord(recordID);
                ByteArrayInputStream bais = new ByteArrayInputStream(data);
                DataInputStream dis = new DataInputStream(bais);
                Preference preference = Preference.deserialize(dis);
                bais.close();
                return preference;
            }
            return null;
        } catch (IOException e)
        {
            return null;
        } catch (RecordStoreException e)
        {
            return null;
        }
    }

}

    MIDlet的设计同样很简单,直接给出代码。整个程序的代码可以从这里下载

package com.j2medev.autologin;

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


public class LoginMIDlet extends MIDlet implements CommandListener
{

    private Display display;
    private Form loginForm;
    private Form successForm;
    private TextField userName;
    private TextField password;
    private ChoiceGroup autoLogin;
    private Model model;
    public static final Command ConnCMD = new Command("Connect", Command.OK, 1);

    protected void startApp() throws MIDletStateChangeException
    {
        initMIDlet();
        Preference p = model.getPreference(2);
        if (p == null || !p.isAutoLogin())
        {
            display.setCurrent(loginForm);
        } else if (p.isAutoLogin())
        {
            Account account = model.getAccount(1);
            System.out.println("username:" + account.getUsrName() + "password:"
                    + account.getPassword());
            display.setCurrent(successForm);

        }

    }

    public void initMIDlet()
    {
        model = new Model();
        display = Display.getDisplay(this);
        loginForm = new Form("LoginForm");
        userName = new TextField("username", null, 20, TextField.ANY);
        password = new TextField("password", null, 20, TextField.PASSWORD);
        autoLogin = new ChoiceGroup("AutoLogin", Choice.MULTIPLE,
                new String[] { "remember me" }, null);
        loginForm.append(userName);
        loginForm.append(password);
        loginForm.append(autoLogin);
        loginForm.addCommand(ConnCMD);
        loginForm.setCommandListener(this);
        successForm = new Form("OK");
        successForm.append("Ok you have connected to server");
    }

    protected void pauseApp()
    {
     
    }


    protected void destroyApp(boolean arg0) throws MIDletStateChangeException
    {

    }

    public void commandAction(Command arg0, Displayable arg1)
    {
        String _userName;
        String _password;
        boolean auto = false;

        if (arg0 == ConnCMD)
        {
            _userName = userName.getString();
            _password = password.getString();
            auto = autoLogin.isSelected(0);
            System.out.println(_userName + _password + auto);
            if (auto)
            {
                Account account = new Account(_userName, _password);
                model.saveAccount(account);
                Preference preference = new Preference(auto);
                model.savePreference(preference);

            }
            display.setCurrent(successForm);
        }
    }

}

分享到:
评论

相关推荐

    应用RMS实现用户自动登陆功能.rar_rms

    标题中的“应用RMS实现用户自动登陆功能”指的是在移动设备上,如Java ME平台,使用Record Management System (RMS)来实现用户登录状态的自动保存和恢复,从而达到自动登录的效果。RMS是Java ME中用于数据存储的一个...

    RMS.zip_rms

    5. **权限管理**: RMS允许开发者设置RecordStore的访问权限,控制不同应用或用户对数据的访问。 6. **空间管理**: 由于移动设备的内存限制,开发者需要谨慎管理RecordStore的空间。RMS会自动管理空间,但当空间不足...

    一个J2me自动登录的例子

    在J2ME中实现自动登录功能,可以帮助用户快速进入应用,提高用户体验。这个例子将探讨如何在J2ME环境中创建一个自动登录系统。 1. **数据存储**: - 在J2ME中,我们通常使用Record Management System (RMS) 来持久...

    MatLab实现RMS、RLS自适应滤波器完整代码以及示例数据

    在信号处理领域,自适应滤波器是一种能够根据输入信号自动调整其参数的滤波器。MatLab是一个强大的数学计算和编程环境,非常适合用于实现这样的算法。本项目提供了RMS(均方根)和RLS(最小均方误差)两种自适应...

    组态软件 RMS2000 源代码

    在RMS2000的源代码中,开发者很可能使用了MFC来构建用户界面和实现系统功能。 源代码是程序的原始形式,包含所有编程细节,如变量定义、函数实现、逻辑判断等。拥有RMS2000的源代码意味着可以深入理解其内部工作...

    ADRMS安装部署系统设置part2

    为了简化用户在登录SharePoint和RMS时的认证流程,可以设置自动登录。具体步骤如下: - 登录到域控制器服务器。 - 打开组策略管理控制台,新建自动登录WEB组策略。 - 在“用户配置”下找到IE登录选项进行设置。 - ...

    VC++ RMS2000工业组态

    RMS2000全称为“Real-time Monitoring and Supervisory System 2000”,是一款实时监控与管理系统,主要应用于制造业、能源、化工等行业的自动化过程控制。其核心特点包括: 1. **实时性**:RMS2000具备强大的实时...

    RMS.rar_rms_估计精度_定位精度

    5. **应用需求匹配**:在具体应用中,如自动驾驶、无人机导航、应急救援等,不同的精度要求会对应不同的RMS阈值。 压缩文件中的"RMS.C"可能是一个C语言编写的源代码文件,包含了实现这些功能的算法和逻辑。开发人员...

    J2me自动登录的源代码实例.rar

    总之,这个J2ME自动登录源代码实例展示了如何在移动设备上利用Java ME实现用户登录功能,涉及到了数据存储、网络通信、解析响应和错误处理等多个方面的知识点。对于深入学习Java ME和移动开发的人员来说,这是一个很...

    J2me自动登录的源代码

    在这个“J2me自动登录的源代码”实例中,我们将探讨如何在J2ME环境中实现一个自动登录功能,从而提升用户使用应用程序的便利性。 自动登录功能通常是基于存储的用户凭证,例如用户名和密码,来快速建立用户的会话,...

    手机开发 rms 数据库管理

    RMS的灵活性使得开发者能够根据应用程序的需求存储不同类型的数据,从简单的用户偏好到复杂的联系人信息或供应链数据。通过熟练掌握RMS的使用,开发者可以创建高效且功能丰富的MIDlet,实现数据的可靠管理和访问。...

    win2003和win2008下RMS部署配置文档(不同环境全方位)

    6. **测试与调整**:部署完成后,进行一系列测试以确保RMS功能正常。这包括创建和应用权限策略,以及验证不同用户组对受保护内容的访问权限。 **RMS配置注意事项** - 在Windows 2008中,RMS支持更高级的安全特性,...

    微软RMS信息安全解决方案

    6. **集成应用**:RMS可与多种企业应用集成,如Microsoft Office套件,使得在日常工作中轻松实现信息保护。 7. **审计与报告**:RMS提供详尽的审计日志,记录所有尝试访问受保护内容的尝试,帮助企业监控数据的使用...

    泰山RMS 资源管理系统 java web 代码

    泰山RMS利用Java的强大功能,实现了服务器端的业务逻辑处理,数据访问以及与其他系统的交互。 2. **Web技术**:本系统采用了Java Web技术栈,包括Servlet、JSP(JavaServer Pages)和JSTL(JavaServer Pages ...

    RMS.zip_rms 酒店系统

    RMS(Revenue Management System,收益管理系统)便是这样的一个核心工具,它集成了预订、入住、退房、账单管理等多种功能,实现了酒店业务的自动化处理。本篇将详细介绍一个基于C++6.0编程语言和SQL Server数据库的...

    RMS-Testing:包含RMS的手动和自动测试

    通过深入理解和应用这些测试资源,开发团队可以确保RMS系统的稳定性和可靠性,从而为用户提供高效且无故障的资源管理服务。同时,持续的测试和优化也是提升用户体验和系统性能的关键。在实际项目中,结合手动测试和...

    AD RMS服务安装与配置.

    2. 自动启用服务器授权凭证:在 AD RMS 中,根群集的服务器授权凭证(Server Licensor Certificate,SLC)可以自动启用,无须手动操作。 3. 与 Active Directory 联合身份验证服务(AD FS)配合使用:AD FS 是 ...

    J2ME RMS 小试牛刀

    例如,一个音乐播放器应用可以使用RMS来保存用户的播放历史,一个简单的待办事项应用可以利用RMS保存任务列表。 **总结** J2ME RMS为移动设备提供了一种轻量级的数据存储解决方案,虽然功能相对有限,但对于许多...

    安装配置ADRMS[汇编].pdf

    2. **AD RMS客户端**:安装在用户设备上,与支持AD RMS的应用程序交互,处理文档的加密和解密。 3. **AD RMS服务器**:负责证书颁发、授权服务以及受保护文档的访问控制。 【权限账户证书】 权限账户证书是AD RMS...

    一个组态软件的完整源代码RMS2000_C

    总的来说,RMS2000_C是一个全面的组态软件解决方案,通过深入研究其源代码,可以学习到C语言在工业自动化领域的应用,以及图形用户界面设计、数据处理、通信协议、事件驱动编程等多个方面的知识。这不仅能够提高...

Global site tag (gtag.js) - Google Analytics