发布时间:2024-02-01 09:00
使用SharedPreferences类存储数据时,首先需要调用getSharedPreferences(String name,int mode)方法获取实例对象。由于该对象本身只能获取数据,不能对数据进行存储和修改,因此需要调用SharedPreferences类的edit()方法获取可编辑的Editor对象,最后通过该对象的putXxx()方法存储数据,示例代码如下
//或取sp对象,参数data表示文件名,MODE_PRIVATE表示文件操作模式
SharePreferences sp=getSharedPreferences(\"data\",MoDE_PRIVATE);
SharedPreferences.Editor editor=sp.edit();//获取编辑器
editor.putString(\"name\",\"传智播客\");//存入String类型数据
editor.putString(\"age\",8);//存入int类型数据
editor.commit();//提交修改
Editor对象是以key/value的形式保存数据的,并且根据数据类型的不同,会调用不同的方法。需要注意的是,操作完数据后,一定要调用commit()方法进行数据提交,否则所有操作不生效。
注意:SharedPreferences中的Editor编辑器是通过key/value(键值对)的形式将数据保存在data/data/
2.读取SharedPreferences中的数据
获取SharedPreferecnes对象,然后通过该对象的getXXX()方法根据相应key值获取到value的值即可,示例代码如下:
SharedPreferences sp=getSharedPreferences(\"data\",MODE_PRIVATE);
String data=sp.getString(\"name\",\"\");//获取用户名
//getXXX()方法的第二个参数为缺省值,如果sp中不存在该key,将返回缺省值,
例如getString(\"name\",\"\"),若name不存在则key就返回空字符串
3.删除SharedPreferences中的数据
需要调用Editor对象的remove(String key)方法或者clear()方法即可,示例代码如下:
editor.remove(\"name\");//删除一个数据
editor.clear();//删除所有数据
然后展示该案例
程序运行成功后,在界面中输入账号和密码,点击”登录\"按钮,会弹出提示信息“登录成功”与“保存成功”,此时如果将程序退出,再重新打开会发现QQ账号和密码仍然显示在当前的EditText中
在activity-main.xml中添加以下代码
创建一个工具类SaveQQ,用来保存qq账号和密码
package com.example.qqlogin;
import android.content.Context;
import android.content.SharedPreferences;
import java.util.HashMap;
import java.util.Map;
public class SaveQQ {
//保存QQ账号和登录密码到data.xml文件中
public static boolean saveUserInfo(Context context, String account, String password){
SharedPreferences sp=context.getSharedPreferences(\"data\",Context.MODE_PRIVATE);
SharedPreferences.Editor edit=sp.edit();
edit.putString(\"username\",account);
edit.putString(\"pwd\",password);
edit.commit();
return true;
}
//从data。xml文件中获取存储的QQ账号和密码
public static Map getUserInfo(Context context){
SharedPreferences sp=context.getSharedPreferences(\"data\",Context.MODE_PRIVATE);
String account=sp.getString(\"username\",null);
String password=sp.getString(\"pwd\",null);
Map userMap=new HashMap();
userMap.put(\"account\",account);
userMap.put(\"password\",password);
return userMap;
}
}
在mianActivity中添加以下代码
package com.example.qqlogin;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import java.util.Map;
public class MainActivity extends AppCompatActivity implements View.OnClickListener
{
private EditText et_account; //账号输入框
private EditText et_password; //密码输入框
private Button btn_login; //登录按钮
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
//通过工具类SaveQQ中的getUserInfo()方法获取QQ账号和密码信息
// Map userInfo = FileSaveQQ.getUserInfo(this);
Map userInfo = SaveQQ.getUserInfo(this);
if (userInfo != null) {
et_account.setText(userInfo.get(\"account\")); //将获取的账号显示到界面上
et_password.setText(userInfo.get(\"password\")); //将获取的密码显示到界面上
}
}
private void initView() {
et_account = (EditText) findViewById(R.id.et_account);
et_password = (EditText) findViewById(R.id.et_password);
btn_login = (Button) findViewById(R.id.btn_login);
//设置按钮的点击监听事件
btn_login.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_login:
//当点击登录按钮时,获取界面上输入的QQ账号和密码
String account = et_account.getText().toString().trim();
String password = et_password.getText().toString();
//检验输入的账号和密码是否为空
if (TextUtils.isEmpty(account)) {
Toast.makeText(this, \"请输入QQ账号\", Toast.LENGTH_SHORT).show();
return;
}
if (TextUtils.isEmpty(password)) {
Toast.makeText(this, \"请输入密码\", Toast.LENGTH_SHORT).show();
return;
}
Toast.makeText(this, \"登录成功\", Toast.LENGTH_SHORT).show();
//保存用户信息
boolean isSaveSuccess = SaveQQ.saveUserInfo(this, account,
password);
/* boolean isSaveSuccess = SPSaveQQ.saveUserInfo(this, account, password);*/
if (isSaveSuccess) {
Toast.makeText(this, \"保存成功\", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, \"保存失败\", Toast.LENGTH_SHORT).show();
}
break;
}
}
}
为了验证QQ信息是否保存到了SharedPreferences中,可以在Device FileExplorer 视图中找到该程序的share_prefs目录,然后找到data.xml。