SharePreferences用法

原创 2015年11月17日 16:35:00
  • 开发应用需要保存一些配置参数,对于Android应用来说,我们最适合采用SharedPreferences保存数据,它是一个轻量级的存储类,特别适合用于保存软件配置参数。

如何使用SharePreferences保存数据

  • 使用SharedPreferences保存数据,其背后是用xml文件存放数据,文件存放在/data/data//shared_prefs目录下。例如:
       SharedPreferences sharedPreferences =getSharedPreferences("mltest", Context.MODE_PRIVATE);
      Editor editor = sharedPreferences.edit();//获取编辑器
      editor.putString("name", "四种模式");
      editor.putInt("age", 4);
      editor.commit();//提交修改
  • getSharedPreferences(name,mode)方法的第一个参数用于指定该文件的名称,名称不用带后缀,后缀会由Android自动加上。方法的第二个参数指定文件的操作模式,共有四种操作模式,分别是:

    Context.MODE_PRIVATE = 0
    Context.MODE_APPEND = 32768
    Context.MODE_WORLD_READABLE = 1
    Context.MODE_WORLD_WRITEABLE = 2

  • 解析:

    1. Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND
    2. Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
    3. Context.MODE_WORLD_READABLEContext.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。
    4. MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;
    5. MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。`

如何使用SharePreferences读取数据

SharedPreferences sharedPreferences = getSharedPreferences("ljq", Context.MODE_PRIVATE);
//getString()第二个参数为缺省值,如果preference中不存在该key,将返回缺省值
String name = sharedPreferences.getString("name", "");
int age = sharedPreferences.getInt("age", 1);

举例

main.xml布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <TextView android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:text="@string/name"
            android:textSize="20px"
            android:id="@+id/nameLable" />
        <EditText android:layout_width="80px"
            android:layout_height="wrap_content" 
            android:layout_toRightOf="@id/nameLable"
            android:layout_alignTop="@id/nameLable"
            android:layout_marginLeft="10px"
            android:id="@+id/name" />
    </RelativeLayout>
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <TextView android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:textSize="20px"
            android:text="@string/age"
            android:id="@+id/ageLable" />
        <EditText android:layout_width="80px"
            android:layout_height="wrap_content" 
            android:layout_toRightOf="@id/ageLable"
            android:layout_alignTop="@id/ageLable"
            android:layout_marginLeft="10px"
            android:id="@+id/age" />
    </RelativeLayout>
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <Button android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:text="@string/button"
            android:id="@+id/button" />
        <Button android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:text="@string/showButton"
            android:layout_toRightOf="@id/button"
            android:layout_alignTop="@id/button"
            android:id="@+id/showButton" />
    </RelativeLayout>
    <TextView android:layout_width="fill_parent"
            android:layout_height="wrap_content" 
            android:textSize="20px"
            android:id="@+id/showText" />
</LinearLayout>

.Java文件

package com.ljq.activity;

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.TextView;
import android.widget.Toast;

public class SpActivity extends Activity {
    private EditText nameText;
    private EditText ageText;
    private TextView resultText;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        nameText = (EditText)this.findViewById(R.id.name);
        ageText = (EditText)this.findViewById(R.id.age);
        resultText = (TextView)this.findViewById(R.id.showText);

        Button button = (Button)this.findViewById(R.id.button);
        Button showButton = (Button)this.findViewById(R.id.showButton);
        button.setOnClickListener(listener);
        showButton.setOnClickListener(listener);

        // 回显
        SharedPreferences sharedPreferences=getSharedPreferences("ljq123", 
                Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE);
        String nameValue = sharedPreferences.getString("name", "");
        int ageValue = sharedPreferences.getInt("age", 1);
        nameText.setText(nameValue);
        ageText.setText(String.valueOf(ageValue));
    }

    private View.OnClickListener listener = new View.OnClickListener(){
        public void onClick(View v) {
            Button button = (Button)v;
            //ljq123文件存放在/data/data/<package name>/shared_prefs目录下
            SharedPreferences sharedPreferences=getSharedPreferences("ljq123", 
                    Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE);
            switch (button.getId()) {
            case R.id.button:
                String name = nameText.getText().toString();
                int age = Integer.parseInt(ageText.getText().toString());
                Editor editor = sharedPreferences.edit(); //获取编辑器
                editor.putString("name", name);
                editor.putInt("age", age);
                editor.commit();//提交修改
                Toast.makeText(SpActivity.this, "保存成功", Toast.LENGTH_LONG).show();
                break;
            case R.id.showButton:
                String nameValue = sharedPreferences.getString("name", "");
                int ageValue = sharedPreferences.getInt("age", 1);
                resultText.setText("姓名:" + nameValue + ",年龄:" + ageValue);
                break;
            }
        }
    };
}

结果
这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载,更多文章请继续关注Carson_Ho的博客!

相关文章推荐

安卓数据存储-SharePreferences

SharePreferences是使用键值对的方式来存储数据的。当保存一条数据的时候可以通过这个键把相应的值取出来。SharePreferences优点是可以支持多种不同数据类型的存储,如果存储的是整...

Android:用SharePreferences实现记住密码功能 (登陆案例)

1、这里首先在onCreate()方法中获取了SharePreferences对象,然后调用他的getBoolean()方法获取remember_password这个键对应的值,因为一开始并不存在对应...

利用SharePreferences保存实体对象

1.使用场景Android中SharePreferences只能存储基本数据类型,如果要对某一模块的数据模型作统一的暂存处理时,可以通过IO操作将对象实体转为String类型后保存在SharePref...

SharePreferences学习总结

一、SharePreferences的写法//存数据的写法 SharedPreferences sp; setSharedPreference(); sp = g...
  • wstever
  • wstever
  • 2017年03月16日 11:29
  • 109

Android复习之旅--SharePreferences

共享偏好设置,使用sharepreferences对登录界面的用户名和密码进行保存

Android应用Preference相关及源码浅析(SharePreferences篇)

1 前言在我们开发Android过程中数据的存储会有很多种解决方案,譬如常见的文件存储、数据库存储、网络云存储等,但是Android系统为咱们提供了更加方便的一种数据存储方式,那就是SharePref...
  • yanbober
  • yanbober
  • 2015年08月24日 09:17
  • 15056

Android数据的四种存储方式(三) —— SharePreferences

除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。其存储位置在/data...

sharePreferences相关文档

  • 2012年07月25日 09:30
  • 3KB
  • 下载

SharePreferences保存用用程序状态

  • 2015年06月09日 10:52
  • 1.26MB
  • 下载

Android初学者之SharePreferences

 使用 SharedPreferences   SharedPreferences是一种轻量级的数据存储方式,学过Web开发的同学,可以想象它是一个小小的Cookie。它可以用键值对...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SharePreferences用法
举报原因:
原因补充:

(最多只允许输入30个字)