最近Android项目需要一个自动登录功能,完成之后,特总结一下,此功能依靠SharedPreferences进行实现。
 
SharedPreferences简介
SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。其存储位置在/data/data/<包名>/shared_prefs目录下。SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。
 
SharedPreferences使用实例:记住用户名密码自动登录
大致了解了SharedPreference之后,接下来看个记住用户名密码自动登录的例子:
 
package com.dt5000.ischool.activity;  
import android.annotation.SuppressLint;  
import android.content.Context;  
import android.content.Intent;  
import android.content.SharedPreferences;  
import android.content.SharedPreferences.Editor;  
import android.os.Bundle;  
import android.util.Log;  
import android.view.KeyEvent;  
import android.view.View;  
import android.widget.CheckBox;  
import android.widget.EditText;  
import com.dt5000.ischool.util.DTUtil;  
import com.dt5000.ischool.util.MyApplication;   
/** 
 * @author: duanyr 
 * @创建时间: 2012-11-13 下午2:36:47 
 *  
 * @类说明:登录界面 
 */  
@SuppressLint("WorldReadableFiles")  
public class LoginActivity extends DTUtil {  
    private static final String TAG = "用户登录";  
    private EditText username;  
    private EditText password;  
    private CheckBox autoLogin;  
    private SharedPreferences sharedPreferences;  
    private String message;  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        MyApplication.getInstance().addActivity(this);  
        sharedPreferences = this.getSharedPreferences("userInfo",Context.MODE_WORLD_READABLE);  
        if (sharedPreferences.getBoolean("AUTO_ISCHECK", false)) {  
            Intent intent = new Intent();  
            intent.setClass(LoginActivity.this, MainActivity.class);  
            startActivity(intent);  
        } else {  
            setContentView(R.layout.activity_login);  
            initView();  
        }  
    }  
    /** 
     * 初始化视图控件 
     */  
    public void initView() {  
        Log.i(TAG, "初始化视图控件");  
        username = (EditText) findViewById(R.id.username);  
        password = (EditText) findViewById(R.id.password);  
        autoLogin = (CheckBox) findViewById(R.id.autoLogin);  
        // 默认记住用户名  
        username.setText(sharedPreferences.getString("userName", ""));  
    }  
    /** 
     * 点击登录按钮时触发的方法 
     * @param view 
     */  
    public void userLogin(View view) {  
        String usernameString = username.getText().toString();  
        String passwordString = password.getText().toString();  
  
        if (validateUser(usernameString, passwordString)) {  
  
            Editor editor = sharedPreferences.edit();  
            editor.putString("userName", usernameString);  
              
            if (autoLogin.isChecked()) {// 自动登录  
                editor.putString("password", passwordString);  
                editor.putBoolean("AUTO_ISCHECK", true).commit();  
            }  
            editor.commit();  
            Intent intent = new Intent();  
            intent.setClass(LoginActivity.this, MainActivity.class);  
            startActivity(intent);  
        } else {  
            alert(this, message);  
        }  
    }  
    //游客登录  
    public void visitorLogin(View view) {  
        Intent intent = new Intent();  
        intent.setClass(LoginActivity.this, MainActivity.class);  
        startActivity(intent);  
    }  
    /** 
     * 验证用户名密码是否正确 
     *  
     * @param username 
     * @param password 
     * @return 
     */  
    public boolean validateUser(String username, String password) {  
        Boolean flag = false;  
        try {  
            //...此处为调用web服务,验证用户名密码的服务,特此省略  
            flag = true;  
        } catch (Exception e) {  
            // TODO Auto-generated catch block  
            Log.e(TAG, e.getMessage());  
            message = "连接服务器失败";  
        }  
        return flag;  
    }  
    /** 
     * 点击退出按钮时触发的方法 
     */  
    public void logout_listener(View view) {  
        dialog_Exit(this);  
    }  
    /** 
     * 监听返回按钮,此为登录界面再返回的话给出退出提示 
     */  
    public boolean onKeyDown(int keyCode, KeyEvent event) {  
        if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {  
            dialog_Exit(this);  
            return false;  
        }  
        return false;  
    }  
}

页面截图:

SharedPreferences实现自动登录记住用户名密码的更多相关文章

  1. Jquery 实现 “下次自动登录” 记住用户名密码功能

    转载自:http://blog.csdn.net/aspnet_lyc/article/details/12030039?utm_source=tuicool&utm_medium=refer ...

  2. autohotkey 自动登录输入用户名密码 getElementsByTagName/getElementsByClassName/getElementById

    针对button未设置id的.可以通过getElementsByTagName获取button的对象数组,再明确其在对象数组中的位置,如第4个button,通过[3]获取.再调用此对象的click() ...

  3. PLSQL自动登录,记住用户名密码

    转: PLSQL自动登录,记住用户名密码&日常使用技巧 配置启动时的登录用户名和密码 这是个有争议的功能,因为记住密码会给带来数据安全的问题. 但假如是开发用的库,密码甚至可以和用户名相同,每 ...

  4. TortoiseGit自动记住用户名密码的方法

    TortoiseGit自动记住用户名密码的方法 windows下比较比较好用的git客户端有2种: msysgit + TortoiseGit(乌龟git) GitHub for Windows gi ...

  5. Windows下让Git记住用户名密码(https)

    最近开始跟老板共同维护公司的框架代码,于是毫不犹豫地选择了Git这个驰名的版本控制系统(公司使用的是TFS,但外网访问老是断线). 选择的托管平台是OSChina,原因是其可以新建私有项目. 在拉取和 ...

  6. cookie记住用户名密码

    <script src="js/jquery.cookie.js" type="text/javascript"></script> $ ...

  7. [No00008F]PLSQL自动登录,记住用户名密码&日常使用技巧

    配置启动时的登录用户名和密码 这是个有争议的功能,因为记住密码会给带来数据安全的问题. 但假如是开发用的库,密码甚至可以和用户名相同,每次输入密码实在没什么意义,可以考虑让PLSQL Develope ...

  8. 让Team Foundation Server/TFS自动记住用户名密码解决方案

    在使用Team Foundation Server(以下简称TFS) 的时候,在每次打开Visual Studio TFS时候,需要输入用户名和秘密,比较麻烦.现提供一种方法可以解决这个问题: 依次执 ...

  9. TFS自动记住用户名密码

    在使用Team Foundation Server(以下简称TFS) 的时候,先在安装Team Foundation 的机器中新建一个与客户机中的同名的用户名,这样,在Visual Studio 20 ...

随机推荐

  1. C++@类的静态成员变量和静态成员函数

    参考: http://blog.csdn.net/morewindows/article/details/6721430 http://www.cnblogs.com/lzjsky/archive/2 ...

  2. 《FreeSWITCH: VoIP实战》:SIP 模块 - mod_sofia

    SIP 模块是 FreeSWITCH 的主要模块,所以,值得拿出专门一章来讲解. 在前几章时里,你肯定见过几次 sofia 这个词,只是或许还不知道是什么意思.是这样的,Sofia-SIP 是由诺基亚 ...

  3. Linux-SSL和SSH和OpenSSH,OpenSSL有什么区别

    ssl是通讯链路的附加层.可以包含很多协议.https, ftps, ..... ssh只是加密的shell,最初是用来替代telnet的.通过port forward,也可以让其他协议通过ssh的隧 ...

  4. unity shader在小米2s上的问题

    一个很简单的用mask裁剪图片的效果: mask: 被裁剪图片: 正确的效果: 在小米2s上测,其中有一台小米2s出现花屏: 手机型号: shader如下: Shader "UI/Trans ...

  5. childNodes、nodeName、nodeValue 以及 nodeType

    nodeName.nodeValue 以及 nodeType 包含有关于节点的信息. nodeName 属性含有某个节点的名称. 元素节点的 nodeName 是标签名称属性节点的 nodeName ...

  6. iOS 下拉刷新和加载更多 (OC\Swift)

    Swift语言出来之后, 可能还没有第三方的下拉刷新和上提加载, 所以自己用UIRefreshControl控件和UITableView实例的tableFooterView(底部视图)属性结合起来写了 ...

  7. DUBBO本地搭建及小案例

    DUBBO的介绍部分我这里就不介绍了,大家可参考官方文档. DUBBO的注册中心安装 DUBBO的注册中心支持好几种,公司用到zookeeper注册中心,所以我这边只说明zookeeper注册中心如何 ...

  8. LinkedHashMap和HashMap区别

    import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.uti ...

  9. 当"唐僧"没那么容易

    西游记 西游记的故事,无人不知. 但西游记里面的哲学与道理,却仍然值得我们去思考. 记得之前曾有一篇文章写到了西游记与团队管理,师徒四人就是一个完美的团队.之所以能够爬山涉水.克服万难,求得真经,无疑 ...

  10. scala之method和function的区别

    在我没有学习scala的时候,主要用java和python做日常工作开发,印象中,没有特别的刻意的去区分method和function的区别,这个关系,正如我们日常生活中,没有刻意的去区分质量和重量. ...