首选项 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);
}
}