Android---实现登录用户信息保存

前两天用SharedPreference实现了保存用户历史信息,当用户再次登录的时候在AutoCompleteTextView(仿google搜索自动提示框)中显示历史用户信息。

这次用户信息是通过XML保存的,其中比较中要的包括了XML数据的生成和XML数据的解析,以及生成apk私有数据。

XML数据生成:在将用户信息保存成XML数据前,我们应该先了解一个非常重要的类XmlSerializer,这个类帮助我们将需要保存成XML数据的信息进行序列化。

代码

    public String writeToString(List<UserInfo> users){
        //实现xml信息序列号的一个对象
        XmlSerializer serializer=Xml.newSerializer();
        StringWriter writer=new StringWriter();
        try {
            //xml数据经过序列化后保存到String中,然后将字串通过OutputStream保存为xml文件
            serializer.setOutput(writer);

            //文档开始
            serializer.startDocument("utf-8", true);

            //开始一个节点
            serializer.startTag("", "users");

            //开始一个子节点
            for(UserInfo user : users){
                serializer.startTag("", "user");
                serializer.attribute("", "id", String.valueOf(user.getId()));

                serializer.startTag("", "name");
                serializer.text(user.getName());
                serializer.endTag("", "name");

                serializer.startTag("", "pwd");
                serializer.text(user.getPwd());
                serializer.endTag("", "pwd");

                serializer.startTag("", "isremember");
                serializer.text(String.valueOf(user.getIsRemember()));
                serializer.endTag("", "isremember");

                serializer.endTag("", "user");
            }

            serializer.endTag("", "users");
            //关闭文档
            serializer.endDocument();
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return writer.toString();
    }

将字串保存为apk的私有文件

代码

    public boolean writeToXml(Context context,String str){
        try {
            OutputStream out=context.openFileOutput("users.xml", Context.MODE_PRIVATE);
            OutputStreamWriter outw=new OutputStreamWriter(out);
            try {
                outw.write(str);
                outw.close();
                out.close();
                return true;
            } catch (IOException e) {
                // TODO Auto-generated catch block
                return false;
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            return false;
        }
    }

 XML数据解析

由于使用DOM方法需要将整个XML文档加载内存中,对系统资源占用比较多,这对内存比较紧张的Android系统来说,使用DOM方法读取XML文档会有很大的限制。
所以使用SAX方法读取XML,以减少对内存资源的占用。

使用SAX解析xml数据其实很简单,无非就是几个过程,startDocument——startElement——character——endElement——endDocument

startDocument:开始解析xml数据,如果处理的数据很多,在这里实例化一个list对象。

startElement:节点元素数据的处理,获取节点元素的属性值,往往在这里对抽象化的对象进行实例化如一个用户的信息UserInfo
user

character:获得杰点元素的内容,在这里专门获得没有属性节点的内容,如<name>cbin</name>

endElement:一个节点的结束,也就相当于一个用户信息的解析完毕,在这里将user添加到list中

endDocument:XML数据解析结束

代码

public class UsersHandler extends DefaultHandler {

    private List<UserInfo> list=null;
    private UserInfo user=null;
    private String tagname;

    //开始解析XML文档
    @Override
    public void startDocument() throws SAXException{
        list=new ArrayList<UserInfo>();
        super.startDocument();
    }

    //开始处理节点,在这里获得节点属性值的(节点属性)
    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes)
    throws SAXException{
        if(localName.equals("user")){
            user=new UserInfo();
            user.setId(Integer.parseInt(attributes.getValue("id")));
        }
        this.tagname=localName;
        super.startElement(uri, localName, qName, attributes);
    }

    //处理没有属性的节点(节点内容)
    @Override
    public void characters(char[] ch, int start, int length) throws SAXException{
        if(this.tagname!=""){
            if(this.tagname.equals("name")){
                String str=new String(ch, start, length);
                user.setName(str);
            }else if(this.tagname.equals("pwd")){
                String str=new String(ch, start, length);
                user.setPwd(str);
            }else if(this.tagname.endsWith("isremember")){
                String str=new String(ch, start, length);
                user.setIsRemember(Integer.parseInt(str));
            }
        }
        super.characters(ch, start, length);
    }

    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException{
        if(localName.equals("user")){
            list.add(user);
        }
        super.endElement(uri, localName, qName);
    }

    @Override
    public void endDocument() throws SAXException{
        super.endDocument();
    }

    public List<UserInfo> getUserList(){
        return list;
    }
}

表示层与SharedPreferences中实现用户登录大同小异,无非是一个登录的逻辑处理

1、加载页面时,加载xml中数据,将用户名列表绑定AutoCompleteTextView

2、假若从act中选定数据,根据用户名查找密码等信息绑定et、ck;

3、登录成功,是新用户直接添加,老用户删除原有记录,重新记录用户信息。

时间: 2024-09-12 04:30:14

Android---实现登录用户信息保存的相关文章

android---实现登录用户信息保存(XML)

前两天用SharedPreference实现了保存用户历史信息,当用户再次登录的时候在AutoCompleteTextView(仿google搜索自动提示框)中显示历史用户信息. 这次用户信息是通过XML保存的,其中比较中要的包括了XML数据的生成和XML数据的解析,以及生成apk私有数据. XML数据生成:在将用户信息保存成XML数据前,我们应该先了解一个非常重要的类XmlSerializer,这个类帮助我们将需要保存成XML数据的信息进行序列化. public String writeToS

关于登录用户信息保存问题,请教

问题描述 一般用户登录系统,用户信息保存到SESSION中,但是由于用户可能长时间不操作页面,会引起SESSION超时,需要重新登录,请问有没有好的办法来储存当前用户登录的信息,而不存在用户登录信息失效的问题??问题补充:cookies也可有超时时间的阿 解决方案 如果你想储存信息可以使用cookies见以下链接引用http://cache.baidu.com/c?m=9d78d513d9921cf201b6c33f1a16a63e581694247c89df4f3992d15f9217465c

系统-浏览器异常关闭或关闭选项卡后怎么清除该登录用户信息

问题描述 浏览器异常关闭或关闭选项卡后怎么清除该登录用户信息 现在我的系统可以实现阻止同一用户在不同浏览器上的登录,允许不同用户在同一浏览器上的登录,可一旦不是正常退出,直接关闭选项卡或直接关闭浏览器的话,用户不能在重新登录了,求教. 解决方案 判断用户的在线状态 获得用户登陆状态不用说了,判断离开的话就有一点问题了,如果说用户都是按照设计者的规定触发退出事件离开的话那就没什么难度了,但是用户的离开方式多种多样,怎么在用户非法离开的时候即时的判断离开呢?最常见的非法离开就是关闭浏览器了. 复制代

jsp-JSP登录后怎么获取当前登录用户信息?

问题描述 JSP登录后怎么获取当前登录用户信息? 我用的是MySQL,做了一个登录界面,注册的的时候有很多信息,但是登录时只验证用户名和密码,数据库如下: 比如我现在要获取已经登录的用户abc的全部信息存入session中,并在其他页面中调用,代码应该怎么写?用电话tel举个例子就好,我再对照着自己摸索一下,感激不尽. 解决方案 密码应该md5加密,对于用户登录之后,在判断用户登录成功之后,可以把用户信息存入到session中,其他地方直接从session中取就可以了.对于刚学的,建议看下框架,

无法返回当前登录用户信息.

问题描述 我用了以下4种方式返回当前登录的用户名,在VS2005环境中点击右键用IE浏览都能成功,但在iis服务下,却返回NETWORKSERVICE的信息,请问各位高手,iis是否要单独配置,请指出,谢谢!this.User.Identity.Name;Request.ServerVariables.Get(5);this.Page.User.Identity.Name;System.Security.Principal.WindowsIdentity.GetCurrent().Name; 解

SVN更改登录用户(转)

一) 原地址:http://www.ixna.net/articles/2606 //证书缓存 $ svn list https://host.example.com/repos/project Error validating server certificate for https://host.example.com:443: - The certificate is not issued by a trusted authority. Use the fingerprint to val

Android QQ登录验证的小例子

客户端: 1.登录时检查网络状态 2.登录加载进度条 3.登录服务器端进行验证,如果用户名和密码存在且正确,则登录,否则失败 4.注册时将用户信息保存到服务器端数据库中(MySQL) 5.记住密码功能(还不完善,只是测试) 6.对密码信息进行md5()单向加密 服务器端: 1.接收客户端发来的登录请求,如果用户名和密码存在于MySQL数据库中则返回客户端一个响应信息"success" 2.接收客户端发来的注册请求,将用户名和密码存放到MySQL数据库中 不过目前还存在很多问题,以后有时

asp.net session、登录用户、cookie常见问题解决办法

asp教程.net session.登录用户.cookie常见问题解决办法 这里主要讲了关于session缓存,失效,以及cookie无法删除等常用见的问题了. OutPutCache 自定义缓存:session.登录用户.cookie 等 其实这个也是新瓶装旧酒的问题,前段时间,把这个做了,况且效果和性能都还不错,所以记录下,希望能帮助更多的人 虽然 outputcache 很重要,但是这个功能真的不好用,很多时间不能满足需求,比如做一些自定义方面的缓存依赖,如:session.登录用户信息.

怎么通过编程实现 将窗体内录入的信息保存到电脑上?

问题描述 我在编一个建议的信息登记系统,最后一步,怎么实现将面向用户的窗体中录入的用户信息保存到本地计算机?谢谢各位! 解决方案 解决方案二:https://www.baidu.com/s?ie=UTF-8&wd=C%23%20%E4%BF%9D%E5%AD%98%E6%96%87%E4%BB%B6解决方案三:System.IO.File.WriteAllText(文件路径,保存内容);解决方案四:用文本xmal保存或者数据库解决方案五:第一选择是使用一个数据库,这样检索保存都方便,但是大型数据