SharedPreferences实现保存用户名功能
1. 简介
SharedPreferences是一种轻型的数据存储方式,通过key-value键值对的方式将数据存储在xml文件中,常用于存储简单的配置信息。
2. 使用方式
2.1 获取SharedPreferences对象
Android中可通过以下三种方式获取SharedPreferences对象:
2.2.1 Context类中的getSharedPreferences()
接收两个参数,第一个参数指定存储数据的文件,若指定文件不存在,则新建该文件,存放目录为"/data/data/package_name/shared_prefs/",其中package_name为包名。
第二个参数则为操作模式,主要有两种:
MODE_PRIVATE:私有模式,默认情况下的模式,与直接传入0作为参数效果一样,表示只有当前程序可对这个文件进行操作。
MODE_MULTI_PROCESS:多进程模式,允许多个进程对该文件进行操作。
2.2.2 Activity类中的getPreferences()
这个方法与上一个方法比较相似,不同之处在于它只接收一个参数,用于指定操作模式,而无需指定文件名,这个方法默认将当前Activity的类名作为存储数据的文件名。
2.2.3 PreferenceManager类中的getDefaultSharedPreferences()
这是一个静态方法,接收一个Context参数,使用当前应用程序的包名作为存储数据的文件名。
2.2 获取SharedPreferences.Editor对象
SharedPreferences对象本身是只可以读取而不能保存数据的,需要保存数据则要调用SharedPreferences对象的edit()方法获取一个Editor对象。
2.3 通过putXxx方法存储数据
得到Editor对象后,则可调用它的putXxx方法添加数据,这里的Xxx指的是添加的数据类型,例如存储字符串数据则调用putString()方法。这个方法接收两个参数,第一个参数为key值,第二个参数为数据的值,即一个键值对。
2.4 提交变化
添加或移除(remove方法)数据后,需要调用Editor对象的commit()方法将所作变化提交。
2.5 获取存储的数据
获取已经存储的数据较为简单,直接调用SharedPreferences对象的getXxx方法即可,使用方法与Editor对象的putXxx类似。这个方法也是接收两个参数,第一个参数指定要获取的数据的key值,第二个参数指定当获取的数据不存在时所返回的默认值。
3. 范例-实现保存用户名的功能
布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
tools:context="com.studying.myapplication.MainActivity">
<!--用户名-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="用户名" />
<EditText
android:id="@+id/username"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="4" />
</LinearLayout>
<!--密码-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="密码" />
<EditText
android:id="@+id/passward"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="4"
android:inputType="textPassword" />
</LinearLayout>
<!--是否记住用户名-->
<CheckBox
android:id="@+id/remember"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="false"
android:text="记住用户名" />
<!--登录-->
<Button
android:id="@+id/login"
android:layout_width="200dp"
android:layout_height="35dp"
android:text="登录"
android:textSize="12sp" />
</LinearLayout>
活动类:
public class MainActivity extends Activity implements View.OnClickListener {
private SharedPreferences mPref;
private SharedPreferences.Editor mEditor;
private EditText mUserName;
private EditText mPassword;
private CheckBox mIsRemember;
private Button mLogin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
mUserName = (EditText) findViewById(R.id.username);
mPassword = (EditText) findViewById(R.id.passward);
mIsRemember = (CheckBox) findViewById(R.id.remember);
mLogin = (Button) findViewById(R.id.login);
mLogin.setOnClickListener(this);
mPref = getSharedPreferences("user_data", MODE_PRIVATE);
mEditor = mPref.edit();
//若之前曾设置过记住用户名,则读取并设置用户名
if (mPref.getBoolean("is_remember", false)) {
mUserName.setText(mPref.getString("user_name", ""));
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.login:
String userName = mUserName.getText().toString().trim();
String password = mPassword.getText().toString().trim();
//测试用账号
if ("admin".equals(userName) && "123456".equals(password)) {
Toast.makeText(this, "登录成功!", Toast.LENGTH_SHORT).show();
//若勾选了记住用户名,则保存数据
if (mIsRemember.isChecked()) {
mEditor.putString("user_name", userName);
mEditor.putBoolean("is_remember", true);
mEditor.commit();
}
} else {
Toast.makeText(this, "用户名或密码错误!", Toast.LENGTH_SHORT).show();
}
break;
}
}
}
SharedPreferences实现保存用户名功能的更多相关文章
- 用户登录保存数据实例(慕课笔记 使用SharedPreferences保存用户名)
学习视频之后自己操作时的笔记. 0.视频地址:http://www.imooc.com/video/3265 1.功能预览: 说明:1)输入错误用户名和密码,点击登录,弹出提示框“禁止登录”: 2)输 ...
- Android简易实战教程--第十六话《SharedPreferences保存用户名和密码》
之前在Android简易实战教程--第七话<在内存中存储用户名和密码> 那里是把用户名和密码保存到了内存中,这一篇把用户名和密码保存至SharedPreferences文件.为了引起误导, ...
- android 保存 用户名和密码 设置等应用信息优化
1.传统的保存用户名,密码方式 SharedPreferences Editor editor = shareReference.edit(); editor.putString(KEY_NAME,& ...
- SharedPreferences实现记住密码功能
SharedPerferences 简单介绍 用于保存简单的键值对数据: 它将数据放在 /data/data/<package name>/shared_prefs目录下,用xml文件保存 ...
- cookie保存用户名及密码
登陆页中,用户输入用户名密码,点击提交,后台对照mysq数据库中,看是否有对应的用户名,以及密码是否正确.如果正确 则将用户名密码分两份Cookie保存.页面跳转到登陆成功页. 用户再次访问登陆页时, ...
- 通过sharedpreferences实现记住密码功能
通过sharedpreferences实现记住密码功能
- (转)TortoiseGit(乌龟git)保存用户名密码的方法
返回博客列表 转 TortoiseGit(乌龟git)保存用户名密码的方法 元谷 发布时间: 2014/05/03 23:07 阅读: 20529 收藏: 21 点赞: 12 评论: 3 window ...
- 关于Microsoft CRM 2013自动保存Autosave功能的10点说明
今天不经意翻看到以前记的笔记发现这个笔记觉得还是应该把它整理记录一下: 关于Microsoft CRM 2013自动保存Autosave功能的10点说明: 1.新建时不会自动保存,需要手动点击保存按钮 ...
- iOS 使用Keychain 保存 用户名和密码到 本地
iOS 使用Keychain 保存 用户名和密码到 本地 之前曾把一些简单的数据保存在了plist,文件,及NsuserDefault里面, 但是如果要保存密码之类的,保存在本地就很不安全了: 但是利 ...
随机推荐
- 深度学习(二)更新ing~
监督学习是指:利用一组已知类别的样本调整分类器的参数,使其达到所要求性能的过程,也称为监督训练或有教师学习 通俗来说就是人给过一个tag再来训练. 神经网络: 三个隐藏层的一个神经网络e.g 后面又提 ...
- javaweb下载文件模板
import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import javax ...
- Linux-安装FFmpeg
FFmpeg官网:http://www.ffmpeg.org 官网介绍 FFmpeg is the leading multimedia framework, able to decode, enco ...
- 在Swift项目中使用OC,在OC项目中使用Swift
几天前,我开始新的App的开发了.终于有机会把swift用在实战中了,也学到了之前纯学语法时没有机会获得的知识. 这篇博文中,我就如何使用swift.OC混编做一个介绍. OC中使用Swift 首先, ...
- PHPUnit简介及使用
一.PHPUnit是什么? 1.它是一款轻量级的PHP测试框架,地址:http://www.phpunit.cn 2.手册:http://www.phpunit.cn/manual/5.7/zh_cn ...
- PV IP UV
PV(访问量) Page View,页面浏览量. 具体的说,就是在一天内,该网站的页面总共访问了多少次 IP(独立IP) 一天内访问网站的IP数量 UV(独立访客) Unique Visitor 一般 ...
- JVM中对象访问定位两种方式
1.通过句柄方式访问, 在Java堆中分出一块内存进行存储句柄池,这样的话,在栈中存储的是句柄的地址 优点: 当对象移动的时候(垃圾回收的时候移动很普遍),这样值需要改变句柄中的指针,但是栈中的指针不 ...
- 阿里云ECS重置磁盘到SSH登录
1.登录阿里云(www.aliyun.com) -- > 控制台: 2.点击左边的"云服务器ECS": 3.点击上面"第二步",进入页面之后,点击&quo ...
- UVA - 10285 Longest Run on a Snowboard (线性DP)
思路:d[x][y]表示以(x, y)作为起点能得到的最长递减序列,转移方程d[x][y] = max(d[px][py] + 1),此处(px, py)是它的相邻位置并且该位置的值小于(x, y)处 ...
- java I/O框架 (四)文件流
文件读取 FileInputStream FileReader 文件写入 FileOutputStream FileWriter 随机文件读写 RandomAccessFile 一.文件读取 File ...