SharedPreferences的学习

SharedPreferences接口 是一个轻量级的存储类,主要存储一些应用程序的配置参数,例如 用户名,密码,自定义参数的设置.它存储的数据是以 key/value键值对的形式保持在xml文件中.该文件位于data/data/(packageName)/shared_perfs文件夹中.需要注意的是 SharedPreferences中的values值只能存储float,int,long,boolean.string,StringSet类型数据.

它提供如下常用方法来访问SharedPreferences 中的key/value键值对.

  1. abstract boolean contains(String key): 判断 SharedPreferences 是否包含特定的key的数据.
  2. abstract Map(String, ?> getAll(): 获取SharedPreferences 中数据里全部的key-values对.
  3. abstract boolean getXxx(String key, boolean defValue) : 获取SharedPreferences 数据里指定的key 对应的value.如果key不存在,就返回默认值 defValue. 其中 Xxx 值只能存储float,int,long,boolean.string,StringSet类型数据.

SharedPreferences 对象本身只能获取数据,并不支持数据的存储和修改.数据的存储和修改需要通过SharedPreferences.Editor( ) 方法来实现.
1. abstract SharedPreferences.Editor clear() 清除SharedPreferences 所有的数据
2. abstract SharedPreferences.Editor putXxx(String key, boolean value): 向SharedPreferences 存入指定的key对应的数据. 其中 Xxx 值只能存储float,int,long,boolean.string,StringSet类型数据.
3. abstract SharedPreferences.Editor remove(String key) : 删除SharedPreferences 指定的key对应的数据.
4. abstract boolean commit() :当Editor编辑完成后,调用该方法提交修改.

使用SharedPreferences 存储数据时,首先要通过 context.getSharedPreferences (String name,int mode)获取SharedPreferences 的实例对象,实例代码如下:
SharedPreferences sp = getSharedPreferences(String name,int mode);
上面的代码中,name 表示文件名,mode表示文件操作模式.该模式有多个值可供选择,具体如下:

  1. MODE_PRIVATE : 指定该 SharedPreferences 中的数据只能被本应用程序读写.
  2. MODE_APPEND: 该文件的内容可以追加.
  3. MODE_WORLD_READABLE 指定该 SharedPreferences 中的数据可以被本其他应用程序( 读 ).
  4. MODE_WORLD_WRITEABLE 指定该 SharedPreferences 中的数据可以被本其他应用程序( 读写 ).

package com.test.sharedpreferences;

import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * SharedPreferences 的学习
 */
public class MainActivity extends AppCompatActivity {
    Button btnRead, btnWrite;
SharedPreferences sp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnRead = (Button) findViewById(R.id.btn_read);
        btnWrite = (Button) findViewById(R.id.btn_write);

        sp = getSharedPreferences("data", MODE_PRIVATE); //data表示文件名
        final SharedPreferences.Editor editor = sp.edit(); //获取编辑器

        btnRead.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //读取字符串
                String time = sp.getString("time",null);

                //读取int类型的数据
                int randomNum = sp.getInt("random",0);

                String result = time==null?"您暂时还未输入数据":"写入的时间为: "+time+"\n 上次生成的随机数: "+randomNum;

                //使用 Toast 显示数据
                Toast.makeText(MainActivity.this, result,Toast.LENGTH_LONG).show();
            }
        });

        btnWrite.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //格式化 时间 格式
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日"+"hh:mm:ss");

                //存入当前时间
                editor.putString("time",sdf.format(new Date()));

                //存入一个随机数
                editor.putInt("random", (int) (Math.random()*100));

                //切勿 忘记 提交
                editor.commit();
            }
        });

    }
}

布局界面

<?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:layout_width="match_parent"
    android:layout_height="match_parent"

    tools:context="com.test.sharedpreferences.MainActivity">

    <Button
        android:id="@+id/btn_write"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="写入数据"/>

    <Button
        android:id="@+id/btn_read"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="读取数据"/>

</LinearLayout>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值