SharedPreferences

本文详细介绍了SharedPreferences在Android开发中的使用方法,包括数据的保存、读取、更新及删除等基本操作,并提供了具体的代码示例。

1、SharedPreferences是什么?
数据持久化
2、SharedPreferences适用于哪些地方?
保存比较简单的数据

代码里的全局变量、局部变量是放在内存里的,当页面被关闭后,内存就被释放了,全局变量、局部变量值被销毁了;所以有时我们需要保存一些数据,下次再读取ta,比如登录信息。

快捷键:提取为方法 command+option+m;

保存数据:

   /*
    * 保存数据
    * */
    private void saveData2Preferences() {
        //系统会自动创建xml文件,文件名preference_name;
        //1、打开Preferences,名称为preference_name,如果存在则打开它,否则创建新的Preferences
        SharedPreferences sharedPreferences = getSharedPreferences("preference_name",MODE_PRIVATE);
        //2、让preference_name处于编辑状态
        SharedPreferences.Editor editor = sharedPreferences.edit();
        //3、存放数据
        editor.putString(TEXT_VIEW_DATA,mDataString);
        //4、完成提交
        editor.apply();
    }

以上,可以将数据保存到文件名为preference_name里,文件在data/data/包名/,目录下;终端命令查看文件:

adb shell
cd data/data/
cd com.example.chenjinhua.sharedpreferences
vi 文件名
退出vi命令:按Esc,然后 :q! 读取数据

 /*
    * 读取数据
    * */
    private void setData() {
        //1、获取Preferences
        SharedPreferences sharedPreferences = getSharedPreferences("preference_name",MODE_PRIVATE);
        //2、取出数据
        mDataString = sharedPreferences.getString(TEXT_VIEW_DATA,"10");
        mEditText_data.setText(mDataString);
        mTextView_second.setText(mDataString);
    }

完整的代码为:

package com.example.chenjinhua.sharepreferences;

import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

/**
 * Created by chenjinhua on 16/3/30.
 */
public class SecondActivity extends AppCompatActivity implements View.OnClickListener {

    public static final String TEXT_VIEW_DATA = "textView_data";
    private EditText mEditText_data;
    private TextView mTextView_second;
    private Button mButton_confirm;
    private String mDataString;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_shareprefs_textview);
        Log.i("MainActivity", "SecondActivity");
        findViews();
        mButton_confirm.setOnClickListener(this);
        setData();
    }
    /*
    * 读取数据
    * */
    private void setData() {
        SharedPreferences sharedPreferences = getSharedPreferences("preference_name",MODE_PRIVATE);
        mDataString = sharedPreferences.getString(TEXT_VIEW_DATA,"10");
        mEditText_data.setText(mDataString);
        mTextView_second.setText(mDataString);
    }

    private void findViews() {
        mEditText_data = (EditText) findViewById(R.id.editText_data);
        mButton_confirm = (Button) findViewById(R.id.button_confirm);
        mTextView_second = (TextView) findViewById(R.id.textView_second);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.button_confirm:
                mDataString = mEditText_data.getText().toString();
                mTextView_second.setText(mDataString);

                saveData2Preferences();
                break;
        }
    }
    /*
    * 保存数据
    * */
    private void saveData2Preferences() {
        //系统会自动创建xml文件,文件名preference_name,
        SharedPreferences sharedPreferences = getSharedPreferences("preference_name",MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString(TEXT_VIEW_DATA,mDataString);
        editor.apply();
    }
}

如何创建?
如何保存?
如何修改?

修改就是再put一次,给同样的key不同的value,如下
editor.putString(TEXT_VIEW_DATA,value1);
editor.putString(TEXT_VIEW_DATA,value2);

如何删除?

editor.remove(xxx); //删除key为xxx对应的值

注意:

editor.commit(); //同步写数据
editor.apply();
//1、另开一个线程,异步写数据,不会占用UI线程;2、和网络相关、IO操作相关,都要用异步。

原理

在data/data/文件夹里写了一个文件。

如何封装成一个能用的类?

如何清除缓存?

adb clear

练习:
做一个小应用,启动时有2张引导界面,只有第一次启动时显示,下一次启动不会显示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值