`
fanjava
  • 浏览: 235919 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

应用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的源代码意味着可以深入理解其内部工作...

    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环境中实现一个自动登录功能,从而提升用户使用应用程序的便利性。 自动登录功能通常是基于存储的用户凭证,例如用户名和密码,来快速建立用户的会话,...

    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为移动设备提供了一种轻量级的数据存储解决方案,虽然功能相对有限,但对于许多...

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

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

    安装配置ADRMS[汇编].pdf

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

Global site tag (gtag.js) - Google Analytics