SharedPreferences 是一个轻量级的存储类,主要是保存一些小的数据,一些状态信息
实现:
1、确定要保存的是什么数据后,写个 SharedPreferences 存储类
2、获取到数据后,调用 SharedPreferences 存储类将数据保存
3、调用 SharedPreferences 存储类将数据取出,并展示出来
效果:
获取数据保存
获取数据展示
实现详情:
1、确定要保存的是什么数据后,写个 SharedPreferences 存储类
我的构思是将注册时的信息保存在 SharedPreferences 中,在其他地方还需要用到
注册信息有 :账号、密码、性别、年龄
如果还有其他数据需要保存,也只要根据需求添加 get、set 方法就好了
import android.content.Context; import android.content.SharedPreferences; /** * Created by Administrator on 2018/3/22 0022. * 保存一些简单的数据 */ public class MySharedPreferences { //创建一个SharedPreferences 类似于创建一个数据库,库名为 data public static SharedPreferences share(Context context){ SharedPreferences sharedPreferences = context.getSharedPreferences("date", Context.MODE_PRIVATE); return sharedPreferences; } //name 账号 //调用上面的 share(Context context) 方法 获取标识为 "name" 的数据 public static Object getName(Context context){ return share(context).getString("name",null); } //调用上面的 share(Context context) 方法 将数据存入,并标识为 "name" //使用 commit() 方法保存会给出反应(保存成功或失败) public static boolean setName(String name, Context context){ SharedPreferences.Editor e = share(context).edit(); e.putString("name",name); Boolean bool = e.commit(); return bool; } //pswd 密码 public static String getPswd(Context context){ return share(context).getString("pswd",null); } //这里使用的是 apply() 方法保存,将不会有返回值 public static void setPswd(String pswd, Context context){ SharedPreferences.Editor e = share(context).edit(); e.putString("pswd",pswd); e.apply(); } /** * 可以根据需求选择用那种方式保存数据 * (需不需要告诉你有没有保存成功) */ //sex 性别 public static String getSex(Context context){ return share(context).getString("sex",null); } public static void setSex(String sex, Context context){ SharedPreferences.Editor e = share(context).edit(); e.putString("sex",sex); e.apply(); } //age 年龄 public static String getAge(Context context){ return share(context).getString("age",null); } public static void setAge(String age, Context context){ SharedPreferences.Editor e = share(context).edit(); e.putString("age",age); e.apply(); } }
从上面可以看到,我创建了一个 MySharedPreferences 类,
在类中创建了SharedPreferences 后,为每个需要存储的都写了 set 、get 方法
通过 set 、 get方法来 保存和获取 需要的数据。
同时,我的试例中有两种保存方法: commit() 和 apply()
commit() 方法会返回保存状态(成功返回 true,失败返回 false)
apply() 方法则没有任何返回
可以根据需要自由使用
2、获取到数据后,调用 SharedPreferences 存储类将数据保存
第二步分为获取数据和保存数据
获取数据:
我这里是通过在 EditText 输入获取数据,其实数据来源可以根据自己需求来
<?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:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="com.win.sharedprefences.MainActivity"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="20dp" android:textColor="#000000" android:text="保存数据"/> <EditText android:id="@+id/name" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="账号:"/> <EditText android:id="@+id/pswd" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="密码:"/> <EditText android:id="@+id/sex" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="性别:"/> <EditText android:id="@+id/age" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="年龄:"/> <Button android:id="@+id/submit" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="提交保存"/> </LinearLayout>
这个界面就是上面展示的“获取数据保存”界面
保存数据:
通过用户输入,我们获取到了将要保存起来的数据,接下来我们把它们保存起来
第一步在 MySharedPreferences类 定义了保存数据的 set方法,调用就好了
//点击事件(获取数据,存入SharedPreferences) submit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //获取输入框的内容 String names = name.getText().toString(); String pswds = pswd.getText().toString(); String sexs = sex.getText().toString(); String ages = age.getText().toString(); //在 MySharedPreferences类里定义好存取方法后,就可以调用了 //这里将数据保存进去 注意:(name 我是定义了有返回值的,试试看) Boolean bool = MySharedPreferences.setName(names, MainActivity.this); MySharedPreferences.setPswd(pswds, MainActivity.this); MySharedPreferences.setSex(sexs, MainActivity.this); MySharedPreferences.setAge(ages, MainActivity.this); //看看保存成功没 if(bool) Toast.makeText(MainActivity.this, "保存成功!", Toast.LENGTH_SHORT).show(); else Toast.makeText(MainActivity.this, "保存失败!", Toast.LENGTH_SHORT).show(); //跳转到展示界面 startActivity(new Intent(MainActivity.this, Main2Activity.class)); } });
这里就展示核心就好了
3、调用 SharedPreferences 存储类将数据取出,并展示出来
从第二步的代码中可以看到,当点击了保存数据按钮后,就会跳到展示界面去
展示界面就是上面效果中的“获取数据展示”所示
<?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:id="@+id/activity_main2" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="com.win.sharedprefences.Main2Activity"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="20dp" android:textColor="#000000" android:text="使用数据"/> <Button android:id="@+id/obtain" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="获取数据"/> <TextView android:id="@+id/one" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/two" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/three" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/four" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
布局大家应该都会
我的定义是,点击展示按钮就获取数据,将数据展示在 TextView 中
获取数就调用 MySharedPreferences类中定义好的 get 方法
//获取保存好的数据并展示出来 obtain.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //通过MySharedPreferences类里定义好的存取方法,获取保存在里面的数据 String names = (String) MySharedPreferences.getName(Main2Activity.this); String pswds = (String) MySharedPreferences.getPswd(Main2Activity.this); String sexs = (String) MySharedPreferences.getSex(Main2Activity.this); String ages = (String) MySharedPreferences.getAge(Main2Activity.this); //将数据放到 TextView 展示出来 one.setText("账号:" + names); two.setText("密码:" + pswds); three.setText("性别:" + sexs); four.setText("年龄:" + ages); } });
注释: SharedPreferences 的使用可以根据自己需求灵活运用,
里面保存的值需要改变的时候,在调用一下 set 方法就行了
同样的标识会被覆盖掉
源码:https://github.com/iscopy/SharedPreferences