网课笔记--安卓入门--数据存储 -- 首选项 [配置]

本文介绍安卓应用中首选项存储的概念及实现方法,包括简单的Key-Value数据存储、配置项的保存与加载过程,并对比了不同存储方式的特点。

首选项 Perferences

# 概念:安卓官方的一个术语,其实就是程序的一些配置项。
       这些配置可以保存在本地,下次打开应用时加载这些配置
       保存配置的方法有很多种,可以放在一个XML文件里,也可以放在*.propertiyes文件里。

# 存储数据:首选项API仅适用于存储比较简单的 Key-Value 型数据。
           Key,就是每一项的名字;Value,就是每个配置项的值。
           例如:"server": "afanihao.cn"
                "port" : 8080
                "autoConnect" : true
# 保存首选项
  - // 打开SharedPreference对象,这个对象相当于一个配置文件,里面可以存放多个配置项
    SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE);
  - // 如果要修改配置项,需要先获取一个editor对象
    SharedPreferences.Editor editor = sharedPref.edit();
  - // 把配置项存进去
    editor.putBoolean("silentMode", silentMode);
  - // 提交保存
    editor.commit();
    -- 这些数据是保存到了Internal Storage存储区,读写速度比较快 

# 加载首选项
  SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE);
  silentMode = sharedPref.getBoolean("silentMode", false); 

# 共享配置
  - 概念:在界面A里保存的首选项,到界面B 里是读不了的
  - 相关代码:
    getPreferences( Context.MODE_PRIVATE )   :(仅本Acitivity能访问)
    getSharedPreferences( "XXX",  Context.MODE_PRIVATE) :可以在多个Acitivy里访问的首选项

# 本地数据库存储
  - 如果你要保存大量的表形数据(如,类似QQ的消息列表),则可以使用SQLite来保存。
  - SQLite是一种文件型数据库,也就是把多个表数据存储到一个单一的文件里,然后允许用SQL方式来读写数据。

# 服务器后台
  - 通常情况下,数据是保存到服务器后台的。
    例如,你打开某个网络课堂APP,那么,你在这个网站上所购买的所有课堂信息,都是保存在服务器的。
  - 你的app要通过网络登录到服务器,从服务器取得数据然后显示。

# 实例代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="10dp"
    tools:context="example.demo0903.MainActivity">


    <CheckBox
        android:id="@+id/id_checkbox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="静音"/>
</LinearLayout>
package example.demo0903;

import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.CheckBox;
import android.widget.CompoundButton;

public class MainActivity extends AppCompatActivity
{
    final String TAG = "测试 MainActivity";
    boolean silentMode = false;

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

        // 监听 '选中' 事件
        CheckBox cbx = (CheckBox)findViewById(R.id.id_checkbox);
        cbx.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
        {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
            {
                silentMode = isChecked;
                saveConfig();
            }
        });

        // 加载首选项
        loadConfig();
    }

    // 加载配置
    public void loadConfig()
    {
        SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE);
        silentMode = sharedPref.getBoolean("silentMode", false); // 第2个参数是默认值

        ((CheckBox)findViewById(R.id.id_checkbox)).setChecked( silentMode);
        Log.d(TAG, "加载首选项:" + silentMode);
    }

    // 保存配置
    public void saveConfig( )
    {
        SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPref.edit();
        editor.putBoolean("silentMode", silentMode);
        editor.commit();

        Log.d(TAG, "保存首选项:" + silentMode);
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值