SharedPreferences——安卓存储方案之一

SharedPreferences

△概述


→SharedPreferenceas安卓下的数据存储方式之一,它的存储方式类似java的Map集合,以键值对方式存储数据。
→该类只能存储基本数据类型,不能存储对象型的数据。
→他是持久化的数据存储方案,就算应用程序被结束了,所存储的数据依然存在。
→每个“SharedPreferences”对象都直接和一个文件关联。

△获取"SharedPreference"对象

共有三类方式获取“SharedPreference”对象。

→Context类“getSharedPreference()”方法

参数说明:方法接受两个参数,第一个代表文件的名字,第二个是操作模式,如果所指定的文件名字并不存在,则会创建一个新的文件。主要有两类操作模式可选择,MODE_PRIVATE、MODE_MULTI_PROCESS。前者是默认的操作模式,表示只有当前应用可以读写这个文件,后者主要用于多进程对同个文件进行读写。

→Activity类的”getPreference()“方法

参数说明:他只接受一个参数,相比于前一个方法,这个方法不接收文件名,只能指定他的操作模式,他的文件名默认是当前Activity类名。

→PreferenceManager类的“getDefaultSharedPreferences()”方法

参数说明:这是一个静态方法,他只接受一个Context的参数,不能自定义文件的名字以及操作模式。

存储路径:所有”SharedPreference"对象都存储在同个路径下面:/data/data/<包名>/shared_prefs/,他们的区别仅仅是文件名字。


△使用“SharedPreference”对数据做读写操作

“SharedPreference”对象的使用主要就几个步骤:
1,通过上述一类方式获取“SharedPreference”对象。
2,调用"SharedPreferences"的edit()方法获取"SharedPreference.Editor"对象。
3,调用"SharedPreferences.Editor”对象里的“putXXXX()”方法写入相关数据。
4,数据写入完成之后,调用commit()方法提交。
另外,对“SharedPreferences”文件进行读取操作,只要“SharedPreferences”对象即可,如果要进行读操作,必须使用“SharedPreferences.Editor”对象。

△代码示例

说那么多,最后做个登陆界面演示
先来一张效果图先



活动布局文件代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:orientation="vertical"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="16sp"
            android:text="用户名字"
            android:padding="4dp"/>
        <!-- 用户名的编辑栏-->
        <EditText
            android:id="@+id/et_user_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
    </LinearLayout>
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="登录密码"
            android:textSize="16sp"
            android:padding="4dp"/>
        <!-- 这个是密码输入框-->
        <EditText
            android:id="@+id/et_pass_word"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <!-- 记录是否保存密码-->
        <CheckBox
            android:id="@+id/cb_remember_pass_word"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="记住密码"/>
        <!-- 登陆-->
        <Button
            android:id="@+id/btn_loading"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="登陆"
            android:layout_alignParentRight="true"/>
    </RelativeLayout>

</LinearLayout>

活动代码
public class SharedActivity extends Activity{

    private EditText userNameEt;
    private EditText passWordEt;
    private CheckBox rememberPassword;

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

    }

    /*
    对视图做初始化的
     */
    private void viewInit(){
        userNameEt = (EditText)findViewById(R.id.et_user_name);
        passWordEt = (EditText)findViewById(R.id.et_pass_word);
        rememberPassword = (CheckBox)findViewById(R.id.cb_remember_pass_word);
//        首先需要读取文件
//        看看原来是否保存有用户名以及密码
        SharedPreferences sharedPreferences = getSharedPreferences("loadInfo",MODE_PRIVATE);
        String userName = sharedPreferences.getString("userName", null);
        String passWord = sharedPreferences.getString("passWord",null);
//        如果有就显示出来
        if(userName!=null){
            userNameEt.setText(userName);
            passWordEt.setText(passWord);
        }
//        点击事件响应函数
        findViewById(R.id.btn_loading).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (rememberPassword.isChecked()) {
//                    如果用户选择保存数据
//                    将用户名以及密码保存到文件里
                    SharedPreferences sharedPreferences = getSharedPreferences("loadInfo", MODE_PRIVATE);
                    SharedPreferences.Editor editor = sharedPreferences.edit();
                    editor.putString("userName", userNameEt.getText().toString());
                    editor.putString("passWord", passWordEt.getText().toString());
                    editor.commit();
                }
                Toast.makeText(SharedActivity.this, "登陆成功", Toast.LENGTH_SHORT).show();
            }
        });
    }
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值