最近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++@类的静态成员变量和静态成员函数
参考: http://blog.csdn.net/morewindows/article/details/6721430 http://www.cnblogs.com/lzjsky/archive/2 ...
- 《FreeSWITCH: VoIP实战》:SIP 模块 - mod_sofia
SIP 模块是 FreeSWITCH 的主要模块,所以,值得拿出专门一章来讲解. 在前几章时里,你肯定见过几次 sofia 这个词,只是或许还不知道是什么意思.是这样的,Sofia-SIP 是由诺基亚 ...
- Linux-SSL和SSH和OpenSSH,OpenSSL有什么区别
ssl是通讯链路的附加层.可以包含很多协议.https, ftps, ..... ssh只是加密的shell,最初是用来替代telnet的.通过port forward,也可以让其他协议通过ssh的隧 ...
- unity shader在小米2s上的问题
一个很简单的用mask裁剪图片的效果: mask: 被裁剪图片: 正确的效果: 在小米2s上测,其中有一台小米2s出现花屏: 手机型号: shader如下: Shader "UI/Trans ...
- childNodes、nodeName、nodeValue 以及 nodeType
nodeName.nodeValue 以及 nodeType 包含有关于节点的信息. nodeName 属性含有某个节点的名称. 元素节点的 nodeName 是标签名称属性节点的 nodeName ...
- iOS 下拉刷新和加载更多 (OC\Swift)
Swift语言出来之后, 可能还没有第三方的下拉刷新和上提加载, 所以自己用UIRefreshControl控件和UITableView实例的tableFooterView(底部视图)属性结合起来写了 ...
- DUBBO本地搭建及小案例
DUBBO的介绍部分我这里就不介绍了,大家可参考官方文档. DUBBO的注册中心安装 DUBBO的注册中心支持好几种,公司用到zookeeper注册中心,所以我这边只说明zookeeper注册中心如何 ...
- LinkedHashMap和HashMap区别
import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.uti ...
- 当"唐僧"没那么容易
西游记 西游记的故事,无人不知. 但西游记里面的哲学与道理,却仍然值得我们去思考. 记得之前曾有一篇文章写到了西游记与团队管理,师徒四人就是一个完美的团队.之所以能够爬山涉水.克服万难,求得真经,无疑 ...
- scala之method和function的区别
在我没有学习scala的时候,主要用java和python做日常工作开发,印象中,没有特别的刻意的去区分method和function的区别,这个关系,正如我们日常生活中,没有刻意的去区分质量和重量. ...