最近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. [转] JAVA网站高并发解决方案

    http://blog.csdn.net/herrapfel/article/details/9630911

  2. Linux驱动设计——并发与竞态控制

    并发的概念:多个执行单元同时.并行被执行. 共享资源:硬件资源(IO/外设等),软件上的全局变量.静态变量等. 四种并发控制机制(对共享资源互斥的访问):原子操作.自旋锁(spinlock).信号量( ...

  3. js动态生成数据列表

    我们通常会使用table标签来展示数据内容,由于需要展示的数据内容是随时更换的,所以不可能将展示的数据列表写死在html写死在页面中,而是需要我们根据后台传来的数据随时更换,这个时候就需要我们使用js ...

  4. 论文笔记之:RATM: RECURRENT ATTENTIVE TRACKING MODEL

    RATM: RECURRENT ATTENTIVE TRACKING MODEL ICLR 2016 本文主要内容是 结合 RNN 和 attention model 用来做目标跟踪. 其中模型的组成 ...

  5. Oracle 10g bigfile表空间、smallfile 表空间

    smallfile tablespace设置不同大小的db_block_size时数据文件允许的最大大小 db_block_size=2KB,2KB*4M=8192M      8Gdb_block_ ...

  6. Oracle 12c RAC 搭建手册

    1  共享设备配置 1.1            设备划分说明 冗余策略 卷划分及大小说明 OCRVOTING Ocrvoting01 8G Ocrvoting02 8G Ocrvoting03 8G ...

  7. C#脱离Halcon编程开发环境使用方法

    在没有安装Halcon开发程序(HDevelop (SSE2))的电脑上面编程,使C#脱离Halcon编程开发环境使用方法,除了按照Halcon与编程环境必须要做的设置步骤外,还需要做如下两个工作: ...

  8. T 恤

    https://detail.tmall.com/item.htm?spm=a220o.1000855.1998025129.1.A6Zaol&id=528088614049&pvid ...

  9. windows知识点

    https://technet.microsoft.com/zh-cn/windows/dd641430  win7相关资源 23. Remtoe FX是微软WIN2008 R2的SP1新功能首先您需 ...

  10. MySQLdb模块的安装

    在WINDOWS环境连接利用python连接MYSQL数据库的时候,需要安装python工具包MySQL-python,但是直接用pip install安装会出错,错误信息如下: _mysql.c(4 ...