当前位置:   article > 正文

安卓笔记之SharedPreference_android sharedpreference乱码问题

android sharedpreference乱码问题

我们在开发中,应用程序会保存少量数据,例如一些字符串、一些标记或者一些配置文件,这时候如果去使用SQLite保存这些数据的话,难免会显得大材小用,用起来也不方便,对于这种信息,保存在SharedPreferences中在合适不过了。

一、SharedPreferences简介。

1、SharedPreferences是一种轻型的存储方式,它的原理是基于xml文件存储key-value键值对数据,通常用来存储一些简单的配置信息。存储位置:/data/data/{包名}/shared_prefs目录下。SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。

2、SharedPreferences对象与SQLite数据库相比,更加的轻量级,不需要创建数据库,创建表,写SQL语句等一系列的操作。美中不足的是SharedPreferences只支持一下几种类型的数据:

  boolean、 int 、float、 long、String

3、SharedPreferences本身是一个接口,程序无法直接创建它的实例,只能通过Context提供的getSharedPreferences(String name, int mode)来获取它的实例,该方法的第二个参数支持如下几个值:

  · Context.MODE_PRIVATE :只被本地程序读写。

  · Context.MODE_WORLD_READABLE :能被其他程序读。

  · Context.MODE_WORLD_WRITEABLE :能被其他程序读、写。

4、SharedPreferences的常用方法如下:

  · boolean contans(String key) :判断SharedPreferences中是否包含特定key的数据。

  · abstract Map<String, ?> getAll() :获取全部的key-value键值对。

  · boolean getXxx(String key, xxx default) : 获取指定key对应的值,如果该key不存在,返回default值。

  还有一点就是,它也不支持条件查询等等,所以尽管SharedPreferences操作起来非常方便,但它也只能作为存储方式的一种补充,而无法完全替代SQLite数据库等其他数据存储方式。

 

二、Editor简介

  SharedPreferences本身没有提供写入数据的方法,而是通过SharedPreferences的对象调用editor()方法获取Editor对象来写入数据。Editor的常用方法如下:

  · clear() :清空SharedPreferences里所有数据。

  · putXxx(String key, xxx value) :向SharedPreferences中写入数据。

  · remove(String key) :删除SharedPreferences中指定key的值。

  · commit() :当Editor编辑完,该方法提交修改。

 

三、用一个例子来说明SharedPreferences的用法

  下面将以一个简单的例子来说明SharedPreferences是怎么来用的。

 

  1、首先创建一个布局文件activity_main,同时在布局文件中放置四个空间,分别是:输入框、读取、写入和清除。读取代码如下:

 

  1. 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. 2 xmlns:tools="http://schemas.android.com/tools"
  3. 3 android:layout_width="match_parent"
  4. 4 android:layout_height="match_parent"
  5. 5 android:orientation="vertical"
  6. 6 >
  7. 7
  8. 8 <EditText
  9. 9 android:id="@+id/et_data"
  10. 10 android:layout_width="wrap_content"
  11. 11 android:layout_height="wrap_content"
  12. 12 android:ems="10" >
  13. 13
  14. 14 <requestFocus />
  15. 15 </EditText>
  16. 16
  17. 17 <Button
  18. 18 android:id="@+id/btn_read"
  19. 19 android:layout_width="wrap_content"
  20. 20 android:layout_height="wrap_content"
  21. 21 android:text="读取" />
  22. 22
  23. 23 <Button
  24. 24 android:id="@+id/btn_write"
  25. 25 android:layout_width="wrap_content"
  26. 26 android:layout_height="wrap_content"
  27. 27 android:text="写入" />
  28. 28
  29. 29 <Button
  30. 30 android:id="@+id/btn_clear"
  31. 31 android:layout_width="wrap_content"
  32. 32 android:layout_height="wrap_content"
  33. 33 android:text="清除" />
  34. 34
  35. 35 </LinearLayout>

   布局文件非常简单,这里就不一一分析了。

 

  2、然后创建MainActivity,并在MainActivity实现对SharedPreferences的写入、读取、清楚等相关操作,代码如下:

 

  1. 1 /**
  2. 2 * MainActivity
  3. 3 *
  4. 4 * @author liuwei
  5. 5 *
  6. 6 */
  7. 7 public class MainActivity extends Activity {
  8. 8 private SharedPreferences preferences;
  9. 9 private Editor editor;
  10. 10 EditText et_data;
  11. 11 Button btn_read;
  12. 12 Button btn_write;
  13. 13 Button btn_clear;
  14. 14
  15. 15 @Override
  16. 16 protected void onCreate(Bundle savedInstanceState) {
  17. 17 super.onCreate(savedInstanceState);
  18. 18 setContentView(R.layout.activity_main);
  19. 19 et_data = (EditText) findViewById(R.id.et_data);
  20. 20 btn_read = (Button) findViewById(R.id.btn_read);
  21. 21 btn_write = (Button) findViewById(R.id.btn_write);
  22. 22 btn_clear = (Button) findViewById(R.id.btn_clear);
  23. 23 preferences = getPreferences("config",Activity.MODE_PRIVATE);
  24. 24 editor = preferences.edit();
  25. 25 btn_read.setOnClickListener(new OnClickListener() {
  26. 26
  27. 27 @Override
  28. 28 public void onClick(View v) {
  29. 29 String str = preferences.getString("key", "没有该数据");
  30. 30 Toast.makeText(getApplicationContext(), str, Toast.LENGTH_SHORT)
  31. 31 .show();
  32. 32 }
  33. 33 });
  34. 34 btn_write.setOnClickListener(new OnClickListener() {
  35. 35
  36. 36 @Override
  37. 37 public void onClick(View v) {
  38. 38 editor.putString("key", et_data.getText().toString());
  39. 39 if (editor.commit()) {
  40. 40 Toast.makeText(getApplicationContext(), "写入成功",
  41. 41 Toast.LENGTH_SHORT).show();
  42. 42 }
  43. 43 }
  44. 44 });
  45. 45 btn_clear.setOnClickListener(new OnClickListener() {
  46. 46
  47. 47 @Override
  48. 48 public void onClick(View v) {
  49. 49 editor.clear();
  50. 50 if (editor.commit()) {
  51. 51 Toast.makeText(getApplicationContext(), "清除成功",
  52. 52 Toast.LENGTH_SHORT).show();
  53. 53 }
  54. 54
  55. 55 }
  56. 56 });
  57. 57 }
  58. 58

  代码分析:

  (1)代码中首先创建了SharedPreferences和Editor的对象,并在onCreate()方法中对它们作了初始化操作。

  (2)通过editor.putString()方法是下了写入数据,数据时以键值对的形式写入的。

  (3)通过SharedPreferences对象的getString(key, default)方法,即可获取对应key的值,这里的第二个参数default为在没有key对应的数据时的默认值,可由我们自行赋值。

  (4)最后可以可通过editor.clear()方法,对SharedPreferences进行清空操作。

  注:对Editor对象的操作,操作完后需要执行commit方法。同时editor.commit()方法会返回一个boolean值,执行成功返回true,执行失败返回false。

四.其他示例

  1. SharedPreferences sp = getSharedPreferences("info", MODE_PRIVATE);
  2. String name = sp.getString("name", "");
  3. String pass = sp.getString("pass", "");
  4. et_name.setText(name);
  5. et_pass.setText(pass);
  6. //使用sharedPreference来保存用户名和密码
  7. //路径在data/data/com.itheima.sharedpreference/share_
  8. SharedPreferences sp = getSharedPreferences("info", MODE_PRIVATE);
  9. //拿到sp的编辑器
  10. Editor ed = sp.edit();
  11. ed.putString("name", name);
  12. ed.putString("pass", pass);
  13. //提交
  14. ed.commit();

 

 

Q: Android请不要滥用SharedPreference

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/数据灵魂/article/detail/60778
推荐阅读
相关标签
  

闽ICP备14008679号