最近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语言在嵌入式中的应用

    上章回顾 编码的规范和程序版式 版权管理和申明 头文件结构和作用 程序命名 程序注释和代码布局规范 assert断言函数的应用 与0或NULL值的比较 内存的分配和释放细节,避免内存泄露 常量特性 g ...

  2. 转(JSONP处理跨域事件)

     前言: 由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了,通过调用强大的PhoneGap插件然后打包,你可以实现100%的Soc ...

  3. 最大化 AIX 上的 Java 性能,第 4 部分: 监视流量

    http://www.ibm.com/developerworks/cn/aix/library/es-Javaperf/es-Javaperf4.html 最大化 AIX 上的 Java 性能,第 ...

  4. Xcode 7 ImageNamed 方法加载jpg图片失败

    更新XCode7后 原来的Image.xcassets文件夹变成了Assets.xcassets 把01.jpg,02.jpg,03.png拖入这个文件夹中 UIImage* test1=[UIIma ...

  5. REG_SZ和REG_EXPAND_SZ的区别

    REG_SZ类型的键值中存在的可扩展占位符%xxx%不会被系统解释: REG_EXPAND_SZ类型的键值中存在的%xxx%的部分会被系统解释.

  6. 决策树模型组合之(在线)随机森林与GBDT

    前言: 决策树这种算法有着很多良好的特性,比如说训练时间复杂度较低,预测的过程比较快速,模型容易展示(容易将得到的决策树做成图片展示出来)等.但是同时, 单决策树又有一些不好的地方,比如说容易over ...

  7. Restfull API 示例

    什么是Restfull API Restfull API 从字面就可以知道,他是rest式的接口,所以就要先了解什么是rest rest 不是一个技术,也不是一个协议 rest 指的是一组架构约束条件 ...

  8. eclipse下gradle配置

    eclipse下gradle配置 这可真麻烦啊,一个项目把java的东西学习完了!这不,刚弄完maven又来了个gradle. http://gradle.org/gradle-download 1. ...

  9. SQL SERVER 拆分列为多行

    --创建测试表 )) insert into #temp(names) values('张三,李四'), ('中国,美国,巴西'), ('深圳,上海,北京,广州,哈尔滨'), ('足球,篮球,乒乓球, ...

  10. MySQL中SSL配置

    http://wenku.baidu.com/link?url=Tl71LnP-mqf-HExIRLWviUINgkfHMbd4hL2WGhuUHQlDwcw3QVfuTgcB6CiIMgvszY9W ...