当前页面位置: » 丰搜网 » 文档中心 » 详细内容
教您如何应用rms实现用户自动登录功能
我对整个程序进行了简化,我们不进行联网,对信息的存储也都从简,只是为了说明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); } }} |