Android数据存储方式(二.1)SharedPreferences
明天就放假了,厦门明天说好的天风要来啊。下午学习一下SharedPreferences
步骤:
(1)建立一个工程SharedPreferences
(2)编写布局activity.xml
(3)编写MainActivity.java
文件activity.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#ffffff"
tools:context="com.ohm.sharedpreferencestest.MainActivity"
tools:ignore="MergeRootFrame" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="用户名:"/>
<EditText
android:id="@+id/login_user_et"
android:layout_width="150dip"
android:layout_height="wrap_content"
android:digits="abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#000000"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="密 码:"/>
<EditText
android:id="@+id/login_pswd_et"
android:layout_width="150dip"
android:layout_height="wrap_content"
android:password="true"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="记住密码:"/>
<CheckBox
android:id="@+id/login_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
<Button
android:id="@+id/login_btn"
android:layout_width="200dip"
android:layout_height="wrap_content"
android:text="登录"/>
</LinearLayout>
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#ffffff"
tools:context="com.ohm.sharedpreferencestest.MainActivity"
tools:ignore="MergeRootFrame" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="用户名:"/>
<EditText
android:id="@+id/login_user_et"
android:layout_width="150dip"
android:layout_height="wrap_content"
android:digits="abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#000000"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="密 码:"/>
<EditText
android:id="@+id/login_pswd_et"
android:layout_width="150dip"
android:layout_height="wrap_content"
android:password="true"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="记住密码:"/>
<CheckBox
android:id="@+id/login_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
<Button
android:id="@+id/login_btn"
android:layout_width="200dip"
android:layout_height="wrap_content"
android:text="登录"/>
</LinearLayout>
MainActivity.java
package com.ohm.sharedpreferencestest;
import android.support.v7.app.ActionBarActivity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;
/*
* 使用SharedPreferences保存key-value对的步骤如下:
(1)使用Activity类的getSharedPreferences方法获得SharedPreferences对象,其中存储key-value的文件的名称由getSharedPreferences方法的第一个参数指定。
(2)使用SharedPreferences接口的edit获得SharedPreferences.Editor对象。
(3)通过SharedPreferences.Editor接口的putXxx方法保存key-value对。其中Xxx表示不同的数据类型。例如:字符串类型的value需要用putString方法。
(4)通过SharedPreferences.Editor接口的commit方法保存key-value对。commit方法相当于数据库事务中的提交(commit)操作
*
* */
public class MainActivity extends ActionBarActivity {
public static final String PREFS_NAME = "prefsname";
public static final String REMEMBER_USERID_KEY = "remember";
public static final String USERID_KEY = "userid";
private static final String DEFAULT_USERNAME = "Hades";
public static final String PASSID_KEY = "passid";
private static final String DEFAULT_PASSWORD = "123";
//组件
private EditText userName = null;
private EditText passWord = null;
private CheckBox cb = null;
private SharedPreferences mSettings = null;
private Button submitBtn = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
userName = (EditText) findViewById(R.id.login_user_et);
passWord = (EditText) findViewById(R.id.login_pswd_et);
cb= (CheckBox) findViewById(R.id.login_checkbox);
submitBtn = (Button) findViewById(R.id.login_btn);
//使用getSharedPreferences()方法获得SharedPreferences对象,其中存储key-value的文件的名称由getSharedPreferences方法的第一个参数指定
mSettings = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);//模式为私有
// cb.setChecked(getRemember());
cb.setChecked(false);//代替上面的函数调用,初始化时设定为“不记住密码”
userName.setText(getUserName());
//userName.setText("xuxin");//如果用这个替换掉,导致后面的名字保存不了
passWord.setText(getPassWord());
submitBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (cb.isChecked()) {
saveRemember(true);
saveUserName(userName.getText().toString());
savePassWord(passWord.getText().toString());
} else {
saveRemember(false);
saveUserName("");
savePassWord("");
}
}
});
}
protected void savePassWord(String passid) {
Editor editor = mSettings.edit();
editor.putString(PASSID_KEY, passid);
editor.commit();
}
// 保存用户名
private void saveUserName(String userid) {
Editor editor = mSettings.edit();// 使用SharedPreferences接口的edit获得SharedPreferences.Editor对象。
editor.putString(USERID_KEY, userid);
//通过SharedPreferences.Editor接口的putXxx方法保存key-value对。其中Xxx表示不同的数据类型。例如:字符串类型的value需要用putString方法。
editor.commit(); //保存数据
// 通过SharedPreferences.Editor接口的commit方法保存key-value对。commit方法相当于数据库事务中的提交(commit)操作
//editor.clear();//清除数据
}
// 设置是否保存的用户名
private void saveRemember(boolean remember) {
Editor editor = mSettings.edit();//使用SharedPreferences接口的edit获得SharedPreferences.Editor对象。
editor.putBoolean(REMEMBER_USERID_KEY, remember);
editor.commit();
}
private String getUserName() {
// TODO Auto-generated method stub
return mSettings.getString(USERID_KEY, DEFAULT_USERNAME);
}
private String getPassWord() {
// TODO Auto-generated method stub
return mSettings.getString(PASSID_KEY, DEFAULT_PASSWORD);
}
/*
private boolean getRemember() {
// TODO Auto-generated method stub
return mSettings.getBoolean(REMEMBER_USERID_KEY, false); //初始化时设定为“不记住密码”
}*/
}
import android.support.v7.app.ActionBarActivity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;
/*
* 使用SharedPreferences保存key-value对的步骤如下:
(1)使用Activity类的getSharedPreferences方法获得SharedPreferences对象,其中存储key-value的文件的名称由getSharedPreferences方法的第一个参数指定。
(2)使用SharedPreferences接口的edit获得SharedPreferences.Editor对象。
(3)通过SharedPreferences.Editor接口的putXxx方法保存key-value对。其中Xxx表示不同的数据类型。例如:字符串类型的value需要用putString方法。
(4)通过SharedPreferences.Editor接口的commit方法保存key-value对。commit方法相当于数据库事务中的提交(commit)操作
*
* */
public class MainActivity extends ActionBarActivity {
public static final String PREFS_NAME = "prefsname";
public static final String REMEMBER_USERID_KEY = "remember";
public static final String USERID_KEY = "userid";
private static final String DEFAULT_USERNAME = "Hades";
public static final String PASSID_KEY = "passid";
private static final String DEFAULT_PASSWORD = "123";
//组件
private EditText userName = null;
private EditText passWord = null;
private CheckBox cb = null;
private SharedPreferences mSettings = null;
private Button submitBtn = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
userName = (EditText) findViewById(R.id.login_user_et);
passWord = (EditText) findViewById(R.id.login_pswd_et);
cb= (CheckBox) findViewById(R.id.login_checkbox);
submitBtn = (Button) findViewById(R.id.login_btn);
//使用getSharedPreferences()方法获得SharedPreferences对象,其中存储key-value的文件的名称由getSharedPreferences方法的第一个参数指定
mSettings = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);//模式为私有
// cb.setChecked(getRemember());
cb.setChecked(false);//代替上面的函数调用,初始化时设定为“不记住密码”
userName.setText(getUserName());
//userName.setText("xuxin");//如果用这个替换掉,导致后面的名字保存不了
passWord.setText(getPassWord());
submitBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (cb.isChecked()) {
saveRemember(true);
saveUserName(userName.getText().toString());
savePassWord(passWord.getText().toString());
} else {
saveRemember(false);
saveUserName("");
savePassWord("");
}
}
});
}
protected void savePassWord(String passid) {
Editor editor = mSettings.edit();
editor.putString(PASSID_KEY, passid);
editor.commit();
}
// 保存用户名
private void saveUserName(String userid) {
Editor editor = mSettings.edit();// 使用SharedPreferences接口的edit获得SharedPreferences.Editor对象。
editor.putString(USERID_KEY, userid);
//通过SharedPreferences.Editor接口的putXxx方法保存key-value对。其中Xxx表示不同的数据类型。例如:字符串类型的value需要用putString方法。
editor.commit(); //保存数据
// 通过SharedPreferences.Editor接口的commit方法保存key-value对。commit方法相当于数据库事务中的提交(commit)操作
//editor.clear();//清除数据
}
// 设置是否保存的用户名
private void saveRemember(boolean remember) {
Editor editor = mSettings.edit();//使用SharedPreferences接口的edit获得SharedPreferences.Editor对象。
editor.putBoolean(REMEMBER_USERID_KEY, remember);
editor.commit();
}
private String getUserName() {
// TODO Auto-generated method stub
return mSettings.getString(USERID_KEY, DEFAULT_USERNAME);
}
private String getPassWord() {
// TODO Auto-generated method stub
return mSettings.getString(PASSID_KEY, DEFAULT_PASSWORD);
}
/*
private boolean getRemember() {
// TODO Auto-generated method stub
return mSettings.getBoolean(REMEMBER_USERID_KEY, false); //初始化时设定为“不记住密码”
}*/
}
将以上代码替换掉你自己的代码,点击登录后运行Run,结果如图,填写信息后退出,再次进入会发现已经保存了之前的用户名和密码。