最近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;
}
}
页面截图:

- Jquery 实现 “下次自动登录” 记住用户名密码功能
转载自:http://blog.csdn.net/aspnet_lyc/article/details/12030039?utm_source=tuicool&utm_medium=refer ...
- autohotkey 自动登录输入用户名密码 getElementsByTagName/getElementsByClassName/getElementById
针对button未设置id的.可以通过getElementsByTagName获取button的对象数组,再明确其在对象数组中的位置,如第4个button,通过[3]获取.再调用此对象的click() ...
- PLSQL自动登录,记住用户名密码
转: PLSQL自动登录,记住用户名密码&日常使用技巧 配置启动时的登录用户名和密码 这是个有争议的功能,因为记住密码会给带来数据安全的问题. 但假如是开发用的库,密码甚至可以和用户名相同,每 ...
- TortoiseGit自动记住用户名密码的方法
TortoiseGit自动记住用户名密码的方法 windows下比较比较好用的git客户端有2种: msysgit + TortoiseGit(乌龟git) GitHub for Windows gi ...
- Windows下让Git记住用户名密码(https)
最近开始跟老板共同维护公司的框架代码,于是毫不犹豫地选择了Git这个驰名的版本控制系统(公司使用的是TFS,但外网访问老是断线). 选择的托管平台是OSChina,原因是其可以新建私有项目. 在拉取和 ...
- cookie记住用户名密码
<script src="js/jquery.cookie.js" type="text/javascript"></script> $ ...
- [No00008F]PLSQL自动登录,记住用户名密码&日常使用技巧
配置启动时的登录用户名和密码 这是个有争议的功能,因为记住密码会给带来数据安全的问题. 但假如是开发用的库,密码甚至可以和用户名相同,每次输入密码实在没什么意义,可以考虑让PLSQL Develope ...
- 让Team Foundation Server/TFS自动记住用户名密码解决方案
在使用Team Foundation Server(以下简称TFS) 的时候,在每次打开Visual Studio TFS时候,需要输入用户名和秘密,比较麻烦.现提供一种方法可以解决这个问题: 依次执 ...
- TFS自动记住用户名密码
在使用Team Foundation Server(以下简称TFS) 的时候,先在安装Team Foundation 的机器中新建一个与客户机中的同名的用户名,这样,在Visual Studio 20 ...
随机推荐
- 第九章 C语言在嵌入式中的应用
上章回顾 编码的规范和程序版式 版权管理和申明 头文件结构和作用 程序命名 程序注释和代码布局规范 assert断言函数的应用 与0或NULL值的比较 内存的分配和释放细节,避免内存泄露 常量特性 g ...
- 转(JSONP处理跨域事件)
前言: 由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了,通过调用强大的PhoneGap插件然后打包,你可以实现100%的Soc ...
- 最大化 AIX 上的 Java 性能,第 4 部分: 监视流量
http://www.ibm.com/developerworks/cn/aix/library/es-Javaperf/es-Javaperf4.html 最大化 AIX 上的 Java 性能,第 ...
- Xcode 7 ImageNamed 方法加载jpg图片失败
更新XCode7后 原来的Image.xcassets文件夹变成了Assets.xcassets 把01.jpg,02.jpg,03.png拖入这个文件夹中 UIImage* test1=[UIIma ...
- REG_SZ和REG_EXPAND_SZ的区别
REG_SZ类型的键值中存在的可扩展占位符%xxx%不会被系统解释: REG_EXPAND_SZ类型的键值中存在的%xxx%的部分会被系统解释.
- 决策树模型组合之(在线)随机森林与GBDT
前言: 决策树这种算法有着很多良好的特性,比如说训练时间复杂度较低,预测的过程比较快速,模型容易展示(容易将得到的决策树做成图片展示出来)等.但是同时, 单决策树又有一些不好的地方,比如说容易over ...
- Restfull API 示例
什么是Restfull API Restfull API 从字面就可以知道,他是rest式的接口,所以就要先了解什么是rest rest 不是一个技术,也不是一个协议 rest 指的是一组架构约束条件 ...
- eclipse下gradle配置
eclipse下gradle配置 这可真麻烦啊,一个项目把java的东西学习完了!这不,刚弄完maven又来了个gradle. http://gradle.org/gradle-download 1. ...
- SQL SERVER 拆分列为多行
--创建测试表 )) insert into #temp(names) values('张三,李四'), ('中国,美国,巴西'), ('深圳,上海,北京,广州,哈尔滨'), ('足球,篮球,乒乓球, ...
- MySQL中SSL配置
http://wenku.baidu.com/link?url=Tl71LnP-mqf-HExIRLWviUINgkfHMbd4hL2WGhuUHQlDwcw3QVfuTgcB6CiIMgvszY9W ...