Android中SharedPreference实例

简介: 和Map的操作差不多,多了editor和提交

和Map的操作差不多,多了editor和提交


序列化内存的Map到外存


SharedPreference是Android提供的一种轻量级的数据存储方式,主要用来存储一些简单的配置信息,例如,默认欢迎语,登录用户名和密码等。其以键值对的方式存储,使得我们能很方便进行读取和存入。


SharedPreference 文件保存在/data/data/<package name>/shared_prefs路径下(如/data/data/com.android.alarmclock/shared_prefs/com.android.text_preferences.xml),通过cat命令可以查看文件,如:
 通过Activity自带的getSharedPreferences方法,可以得到SharedPreferences对象。
 public abstract SharedPreferences getSharedPreferences (String name, int mode);
 name:表示保存后 xml 文件的名称
 mode:表示 xml 文档的操作权限模式(私有,可读,可写),使用0或者MODE_PRIVATE作为默认的操作权限模式。 
 1.数据读取:
 通过SharedPreferences对象的键key可以获取到对应key的键值。对于不同类型的键值有不同的函数:getBoolean,getInt,getFloat,getLong.
 public abstract String getString (String key, String defValue);
 2.数据存入:
 数据的存入是通过SharedPreferences对象的编辑器对象Editor来实现的。通过编辑器函数设置键值,然后调用commit()提交设置,写入xml文件。
复制代码


会自动判断是否存在,若存在,则修改,不存在则创建 public abstract SharedPreferences.Editor edit (); public abstract SharedPreferences.Editor putString (String key, String value); public abstract boolean commit ();


package cn.itcast.preferences;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
    private EditText nameText;
    private EditText ageText;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        nameText = (EditText)findViewById(R.id.name);
    ageText = (EditText)findViewById(R.id.age);
        Button button = (Button)this.findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {      
      @Override
      public void onClick(View v) {
        String name = nameText.getText().toString();
        String age = ageText.getText().toString();
        //去的SharedPreferences对象 itcast为保存的xml文件名 MODE_WORLD_READABLE 为模式
        SharedPreferences preferences = getSharedPreferences("itcast", Context.MODE_WORLD_READABLE);
        //获得编辑器
        Editor editor = preferences.edit();
        editor.putString("name", name);
        editor.putInt("age", new Integer(age));
        //提交
        editor.commit();
        Toast.makeText(MainActivity.this, R.string.success, 1).show();
      }
    });
        Button resumebutton = (Button)this.findViewById(R.id.resume);
        resumebutton.setOnClickListener(new View.OnClickListener() {      
      @Override
      public void onClick(View v) {       
        SharedPreferences preferences = getSharedPreferences("itcast", Context.MODE_PRIVATE);
        String name = preferences.getString("name", "");
        int age = preferences.getInt("age", 20);
        nameText.setText(name);
        ageText.setText(String.valueOf(age));
      }
    });
    }
}
复制代码


几点说明:


SharedPreferences的获取有两种方法:一是上面提到的通过Activity自带(本质来讲是Context的)的getSharedPreferences方法,可以得到SharedPreferences对象。这种方法的好处是可以指定保存的xml文件名。另一种是通过

PreferenceManager.getSharedPreferences(Context)获取SharedPreferences对象。这种方法不能指定保存的xml文件名,文件名使用默认的:+"_preferences.xml"的形式,不过如果在一个包里面采用这种方式需要保存多个这样的xml文件,可能会乱掉。建议采用第一种指定xml文件名的形式。 数据的存入必须通过SharedPreferences对象的编辑器对象Editor来实现,存入(put)之后与写入数据库类似一定要commit。 访问别的程序的SharedPreferences


package cn.itcast.other;
import android.content.Context;
import android.content.SharedPreferences;
import android.test.AndroidTestCase;
import android.util.Log;
public class AccessOtherAppPreferenceTest extends AndroidTestCase {
  private static final String TAG = "AccessOtherAppPreferenceTest";
  public void testAccessOtherAppPreference() throws Throwable{
    //String path = "/data/data/cn.itcast.preferences/shared_prefs/itcast.xml";
    //File file = new File(path);
    // SAX来完成xml文件的解析,才能得到参数
    //构造其他程序的上下文对象
    Context otherContext = getContext().createPackageContext("cn.itcast.preferences",
        Context.CONTEXT_IGNORE_SECURITY);
    SharedPreferences preferences = otherContext.getSharedPreferences("itcast", Context.MODE_PRIVATE);
    String name = preferences.getString("name", "");
    int age = preferences.getInt("age", 20);
    Log.i(TAG, "name="+ name + ",age="+ age);
  }
}



目录
相关文章
|
6月前
|
Java 关系型数据库 数据库
Android App连接真机步骤与APP的开发语言和工程结构讲解以及运行实例(超详细必看)
Android App连接真机步骤与APP的开发语言和工程结构讲解以及运行实例(超详细必看)
95 0
|
编解码 Android开发 开发者
Android平台RTMP多实例推送的几种情况探讨
好多开发者提到,如何实现Android平台,多实例推送,多实例推送,有几种理解: 1. 多路编码,多个实例分别推送到不同的RTMP URL(如Android采集板卡同时接2路出去); 2. 同一路编码,多个实例分别推送到不同的RTMP URL(如推送到内网、外网不同的RTMP服务器); 3. 部分路编码、部分路对接编码后的H.264/AAC数据,多个实例分别推送到不同的RTMP URL(混合推)。
|
6月前
|
Android开发
Android应用实例(一)之---有道辞典VZ.0
Android应用实例(一)之---有道辞典VZ.0
42 2
|
4月前
|
API Android开发
Android 监听Notification 被清除实例代码
Android 监听Notification 被清除实例代码
|
5月前
|
安全 Java Android开发
使用Unidbg进行安卓逆向实例讲解
使用Unidbg进行安卓逆向实例讲解
132 2
|
6月前
|
Android开发
Android修改默认system/bin/下可执行程序拥有者和权限,使用实例,只有root和系统app权限才能执行某个命令。
Android修改默认system/bin/下可执行程序拥有者和权限,使用实例,只有root和系统app权限才能执行某个命令。 【5月更文挑战第2天】
296 0
|
6月前
|
Android开发 C++
Android P HAL层添加HIDL实例
Android P HAL层添加HIDL实例
114 0
|
6月前
|
Shell Android开发 数据安全/隐私保护
安卓逆向 -- Frida环境搭建(HOOK实例)
安卓逆向 -- Frida环境搭建(HOOK实例)
142 0
|
Shell Android开发 数据安全/隐私保护
安卓逆向 -- Frida环境搭建(HOOK实例)
安卓逆向 -- Frida环境搭建(HOOK实例)
297 0
|
Android开发
Android的配置文件操作封装,摒弃SharedPreference操作配置漫天乱飞
Android的配置文件操作封装,摒弃SharedPreference操作配置漫天乱飞