SharedPerferences常用来存储一些轻量级的数据,以key-value(键值对)形式存储数据,当用户卸载此应用程序时,数据会一并清除。
①SharedPerferences是Android平台上一个轻量级的存储轻量级数据时简单、便捷(如:保存记住密码状态等等);
②以key-value(键值对)形式存储数据,可以存储的数据:double、float、int、long、boolean。
③存储位置在/data/data/<包名>/shared_prefs目录下
④保存的数据以XML形式存储
1.获得使用SharedPerferences对象;
2.获得Editor对象;
3.通过Editor对象的putXXX函数,设置写入数据;
4.通过Editor对象的commit提交写入;
具体实现代码如下:
private SharedPreferences sharedPreferences;
private SharedPreferences.Editor editor;
sharedPreferences=getSharedPreferences("xm",MODE_PRIVATE);
editor=sharedPreferences.edit();
在这里我定义的是全局的变量,所以是在外面申明的,再通过putString写入数据:
String username=editText1.getText().toString();
String password=editText2.getText().toString();
editor.putString("username",username);
editor.putString("password",password);
editor.commit();
这样就把数据给写入进去了
结合上面的写入数据,通过创建的sharedPreferences对象的getXXX方法进行读取就行了
String name=sharedPreferences.getString("username","");
String pwd =sharedPreferences.getString("password","");
editText1.setText(name);
editText2.setText(pwd);
首先创建好布局文件:
整体有这么些控件,大体的思路:
输入账号,密码;如果点击记住密码,再点击登录,清楚这个My application的后台再打开,账号密码一样会记住;如果不点击记住密码,则都不会记住;
private SharedPreferences sharedPreferences;
private SharedPreferences.Editor editor;
sharedPreferences=getSharedPreferences("xm",MODE_PRIVATE);
editor=sharedPreferences.edit();
先创建这几个对象,再开始写入的步骤,因为这里是得到EditText上的值:
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.loginBTN:
editor=sharedPreferences.edit();
if(checkBox.isChecked()){
String username=editText1.getText().toString();
String password=editText2.getText().toString();
editor.putString("username",username);
editor.putString("password",password);
editor.putInt("checked",1);
}
else{
editor.putString("username","");
editor.putString("password","");
editor.putInt("checked",0);
}
editor.commit();
break;
}
}
在按钮的点击事件中写入文件,然后再读取文件:
sharedPreferences=getSharedPreferences("xm",MODE_PRIVATE);
int checked=sharedPreferences.getInt("checked",0);
if(checked==1){
//读取文件
String name=sharedPreferences.getString("username","");
String pwd =sharedPreferences.getString("password","");
editText1.setText(name);
editText2.setText(pwd);
checkBox.setChecked(true);
}else{
checkBox.setChecked(false);
}
}
这里面的checked就类似于一个标志位,用来判断一开始的checkBox是否是勾选了的
记住密码的完整代码如下:
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;
public class Main8Activity extends AppCompatActivity implements View.OnClickListener{
private EditText editText1,editText2;
private CheckBox checkBox;
private Button button;
private SharedPreferences sharedPreferences;
private SharedPreferences.Editor editor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main8);
editText1=findViewById(R.id.userET);
editText2=findViewById(R.id.pwdET);
checkBox=findViewById(R.id.loginCB);
button=findViewById(R.id.loginBTN);
button.setOnClickListener(this);
sharedPreferences=getSharedPreferences("xm",MODE_PRIVATE);
int checked=sharedPreferences.getInt("checked",0);
if(checked==1){
//读取文件
String name=sharedPreferences.getString("username","");
String pwd =sharedPreferences.getString("password","");
editText1.setText(name);
editText2.setText(pwd);
checkBox.setChecked(true);
}else{
checkBox.setChecked(false);
}
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.loginBTN:
editor=sharedPreferences.edit();
if(checkBox.isChecked()){
String username=editText1.getText().toString();
String password=editText2.getText().toString();
editor.putString("username",username);
editor.putString("password",password);
editor.putInt("checked",1);
}
else{
editor.putString("username","");
editor.putString("password","");
editor.putInt("checked",0);
}
editor.commit();
break;
}
}
}