zoukankan      html  css  js  c++  java
  • 使用SharedPreferences进行数据存储

    很多时候我们开发的软件需要向用户提供软件参数设置功能,例如我们常用的QQ,用户可以设置是否允许陌生人添加自己为好友。

    对于软件配置参数的保存,如果是Windows软件通常我们会采用ini文件进行保存;

    如果是j2se,我们会采用properties属性文件或者xml进行保存;

    如果是Android应用,我们最适合采用什么方式保存软件配置参数呢?

    Android平台给我们提供了一个SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数。

    使用SharedPreferences保存数据,其背后使用xml文件存放数据,文件存放在/data/data/<package name>/shared_prefs目录下。

    保存参数&回显参数:

    1.实现布局:

    代码—actvity_main.xml:

     1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     android:orientation="vertical"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     >
     6 
     7     <TextView
     8         android:layout_width="wrap_content"
     9         android:layout_height="wrap_content"
    10         android:text="@string/name" />
    11     
    12     <EditText
    13         android:layout_width="match_parent"
    14         android:layout_height="wrap_content"
    15         android:id="@+id/name" />
    16     
    17     <TextView
    18         android:layout_width="wrap_content"
    19         android:layout_height="wrap_content"
    20         android:text="@string/age" />
    21     
    22     <EditText
    23         android:layout_width="match_parent"
    24         android:layout_height="wrap_content"
    25         android:numeric="integer"
    26         android:id="@+id/age" />
    27     
    28     <Button 
    29         android:layout_width="wrap_content"
    30         android:layout_height="wrap_content"
    31         android:text="@string/button"
    32           android:onClick="save"
    33         />
    34 
    35 </LinearLayout>

    string.xml:

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <resources>
     3 
     4     <string name="app_name">软件参数设置</string>
     5     <string name="hello_world">Hello world!</string>
     6     <string name="name">姓名</string>
     7     <string name="age">年龄</string>
     8     <string name="button">保存参数</string>
     9     <string name="success">保存完成</string>
    10 
    11 </resources>

    2.通过建立一个业务类实现保存和获取数据的功能—PreferencesServiceservice.java:

     1 package cn.itcast.service;
     2 
     3 import java.util.HashMap;
     4 import java.util.Map;
     5 
     6 import android.content.Context;
     7 import android.content.SharedPreferences;
     8 import android.content.SharedPreferences.Editor;
     9 
    10 
    11 public class PreferencesServiceservice {
    12     private Context context;
    13     
    14     public PreferencesServiceservice(Context context) { 
    15         this.context = context;
    16     }
    17 
    18     public void save(String name, Integer age) {
    19         //由于我们采用SharedPreferences来保存参数,所以首先获得SharedPerences这个类型的对象
    20         //这个类型的对象的取得,我们要通过上下文对象来得到,所以首先引入上下文对象
    21         //上下文对象我们通过构造器传入进来,然后在此处调用上下文对象中的getSharedPreferences()
    22         SharedPreferences preferences = context.getSharedPreferences("itcast", Context.MODE_PRIVATE);//文件名称(不要后缀),操作模式
    23         //得到了这个对象后,我们就可以利用它提供的API向里面存放数据了
    24         //先取得编辑器后,通过编辑器对象存放数据
    25         Editor editor = preferences.edit();
    26         //然后调用它的常用类型put方法,往servePreference里面存放数据
    27         editor.putString("name",name);
    28         editor.putInt("age",age);
    29         //目前这两项参数是保存在内存中的,还没有真正的保存在文件中
    30         editor.commit();//提交方法,把内存中存放的数据,提交回文件中,完成数据的保存
    31     }
    32     
    33     //获取SharedPreferences保存的参数
    34     //再定义一个业务
    35     /**
    36      * 获取各项配置参数
    37      * @return
    38      */
    39     public Map<String,String> getPreferences()
    40     {
    41         Map<String,String> params = new HashMap<String,String>();
    42         //首先取得SharedPreferences 的对象
    43         SharedPreferences preferences = context.getSharedPreferences("itcast", Context.MODE_PRIVATE);
    44         params.put("name", preferences.getString("name", ""));
    45         params.put("age", String.valueOf(preferences.getInt("age", 0)));
    46         return params;
    47     }
    48 }

    3.在主活动中调用该保存和回显参数的功能—MainActivity.java:

     1 package cn.itcast.setting;
     2 
     3 import java.util.Map;
     4 
     5 import cn.itcast.service.PreferencesServiceservice;
     6 import android.app.Activity;
     7 import android.os.Bundle;
     8 import android.view.Menu;
     9 import android.view.MenuItem;
    10 import android.view.View;
    11 import android.widget.EditText;
    12 import android.widget.Toast;
    13 
    14 public class MainActivity extends Activity {
    15     private EditText nameText;
    16     private EditText ageText;
    17     private PreferencesServiceservice service;
    18 
    19     @Override
    20     protected void onCreate(Bundle savedInstanceState) {
    21         super.onCreate(savedInstanceState);
    22         setContentView(R.layout.activity_main);
    23         nameText = (EditText)this.findViewById(R.id.name);
    24         ageText = (EditText)this.findViewById(R.id.age);
    25         
    26         service = new PreferencesServiceservice(this);
    27         //回显代码
    28         Map<String,String> params = service.getPreferences();
    29         nameText.setText(params.get("name"));
    30         ageText.setText(params.get("age"));
    31     }
    32 
    33     public void save(View v)
    34     {
    35         String name = nameText.getText().toString();
    36         String age = ageText.getText().toString();
    37         //点击按钮要保存参数,保存参数的过程就是业务处理的过程
    38         //所以我们应该把这段代码写在service层,所以我们写一个类叫做参数service类
    39 //        PreferencesServiceservice service = new PreferencesServiceservice(this);
    40         service.save(name,Integer.valueOf(age));
    41         Toast.makeText(getApplicationContext(), R.string.success, 1).show();
    42     }
    43 
    44 }

    注解:

    因为SharedPreferences背后是使用xml文件保存数据,getSharedPreferences(name,mode)方法的第一个参数用于指定该文件的名称,名称不用带后缀,

    后缀会由Android自动加上。方法的第二个参数指定文件的操作模式,共有4种操作模式。如果希望SharedPreferences背后使用的xml文件能被其他应用读和写,

    可以指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE权限。

    另外,Activity还提供了另一个getPreferences(mode)方法操作SharedPreferences,这个方法默认使用当前类不带包名的类名作为文件的名称。

  • 相关阅读:
    C#面试题
    C# 安装部署
    Ribbon菜单栏布局和调整大小
    Dev GridControl使用小结
    C#多线程学习(一) 多线程的相关概念
    PDF转换成图片——11种方案
    C#多线程学习(二) 如何操纵一个线程
    C# 截屏方式
    dev中gridview控件
    (转载) 如何降低project压缩文件的大小? (Quartus II)
  • 原文地址:https://www.cnblogs.com/ttzm/p/7327783.html
Copyright © 2011-2022 走看看