SharedPreferences的存储位置和格式

1.SharedPreferences 本身是一个接口,程序无法直接创建SharedPreferences实例,只能通过Context提供的getSharedPreferences(String name,int mode)来获取该实例

该方法的第二个参数可以设置模式有:

(1).Context.MODE_PRIVATE:指定该SharedPreferences数据只能被应用程序读写

(2).Context.MODE_WORLD_READABLE:指定该SharedPreferences数据能被其他应用程序读,但不能写。

(3).Context,MODE_WORLD_WRITEABLE:指定该SharedPreferences数据能被其他应用程序读写。

从Android 4.2 模式(2)、(3)就不再推荐使用。

[java] view plain copy

public class LoginActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener {

// SharedPreferences 使用规则:

// 1. 存储方式:保存到文件中

// 2. 存储格式: Key-Value

// 3. 存储内容: 不要过长,精简的

// 4. 应用场景: 配置字段、用户信息、

private EditText mTxtName;

private EditText mTxtPass;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_login);

mTxtName = (EditText) findViewById(R.id.txt_name);

mTxtPass = (EditText) findViewById(R.id.txt_pass);

// 1. SharedPreferences 在使用的时候,应该先看一下是否保存过数据

SharedPreferences sp =

getSharedPreferences("app", MODE_PRIVATE);

// 3.监测是否有记住密码的功能,同时设置 CheckBox的状态变化

CheckBox chbRememberPass = (CheckBox) findViewById(R.id.chb_remember_pass);

boolean rp = sp.getBoolean("rememberPass", false);

chbRememberPass.setChecked(rp);

chbRememberPass.setOnCheckedChangeListener(this);

if(rp) {

// 2. 使用 getXxxx(String key, ..defaultValue)

String name = sp.getString("name", null);

String pass = sp.getString("pass", null);

mTxtName.setText(name);

mTxtPass.setText(pass);

}

}

public void btnLogin(View view) {

SharedPreferences sp = getSharedPreferences("app", MODE_PRIVATE);

// 保存配置到 SharedPreferences

SharedPreferences.Editor editor = sp.edit();

// 添加内容到存储区

editor.putString("name", mTxtName.getText().toString());

editor.putString("pass", mTxtPass.getText().toString());

// Editor 必须要 提交 可以使用commit() 或者 apply() (API 9以上)

editor.apply();

Intent intent = new Intent(this, MainActivity.class);

startActivity(intent);

}

@Override

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

SharedPreferences sp = getSharedPreferences("app", MODE_PRIVATE);

SharedPreferences.Editor editor = sp.edit();

if(isChecked){

editor.putBoolean("rememberPass", true);

}else{

editor.remove("rememberPass");

}

editor.apply();

}

}

2.android的File存储:Context提供了两个方法来打开应用程序的数据文件里的文件IO流

(1).FileInputStream openFileInput(String name): 打开应用程序的数据文件夹下的name文件对应的输入流

(2).FileOutputStream openFileOutput(String name,int mode):打开应用程序的数据文件夹下的那么文件对应的输出流

MODE_PRIVATE: 该文件只能被当前程序读写

MODE_APPEND:以追加的方式打开该文件,应用程序可以向该文件中追加内容。

MODE_WORLD_READABLE:该文件的内容可以被其他程序读取

MODE_WORLD_WRITEABLE:该文件的内容可以被其他程序读写

android 4.2开始、不再推荐使用

3.读写SD卡上的文件

(1).Environment.getExternalStorageState();// 1. 监测当前手机是否包含存储卡, 所有外部存储的操作都需要在清单文件声明权限

(2).Environment.getExternalStorageDirectory(); 获取SD卡的目录

[java] view plain copy

public class ExternalActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_external);

testSdcard();

}

public void testSdcard() {

// 1. 监测当前手机是否包含存储卡,

//    所有外部存储的操作都需要在清单文件声明权限

String state = Environment.getExternalStorageState();

// 根据状态判断是否有外部存储

if (Environment.MEDIA_MOUNTED.equals(state)) {

// 外部存储已经挂载,可以访问和使用

// 2. 获取外部存储的根目录

File directory = Environment.getExternalStorageDirectory();

Log.d("ExternalActivity", "外部存储目录 " + directory.getAbsolutePath());

// 3. 获取外部存储,公共目录

File dcimDir = Environment.getExternalStoragePublicDirectory(

Environment.DIRECTORY_DCIM

);

if (dcimDir.exists()) {

// TODO: 遍历所有的文件,打印出来

File[] files = dcimDir.listFiles();

for (File file : files) {

Log.d("ExternalActivity", "file = " + file);

}

}

// 4. 外部存储可以获取 应用程序特定的一些目录,类似于内部存储的路劲

//    /外部根目录/Android/data/包名/

//    使用上下文 Context来获取

getExternalCacheDir();

// 获取外部存储区中,应用程序自身 files 目录内部的文件夹

// 如果传递的参数为 null,直接返回 files 目录,

// 否则  files/xxxx  目录

getExternalFilesDir("images");

}

}

}


相关内容

  • 经典Android面试题x100

    Android开发工程师经典面试题(附参考答案) ‣下列哪些语句关于内存回收的说明是正确的? (B) A. 程序员必须创建一个线程来释放内存 B.内存回收程序负责释放无用内存 C.内存回收程序允许程序员直接释放内存 D.内存回收程序可以在指 ...


  • 管理网络的使用情况

    给我们的建议 感谢您使用eoe.cn,并将遇到的问题反馈给我们,我们会在第一时间处理:为了能快速定位和解决您遇到的问题,请将您的问题描述的稍微详细一些,谢谢你参与eoe产品完善. 问题类型bug bug 建议 想法 合作 其它 问题描述 联 ...


  • 安卓天气预报软件需求分析说明书

    ● <Android 应用程序开发>课程 ● ● ● ● ● ● ● ● ● ● ● 天气预报软件设计 需求分析报告 Android 天气预报软件设计 Issue Date – XXXX/XX/XX //发布时间 ● <A ...


  • 大一计算机基础考试基本知识

    一.基础知识 1. 计算机的概念.发展.特点.分类及其应用领域. 计算机系统的配置及主要技术指标. 2. 数制的概念,二.八.十.十六进制整数之间的转换. 3. 计算机信息的表示:数.字符的编码包括西文字符与ASCII 码和汉字及其编码(外 ...


  • 整理的最全面的android面试题

    1.请描述下Activity的生命周期. 必调用的三个方法:onCreate() --> onStart() --> onResume(),用AAA表示 (1)父Activity启动子Activity,子Actvity退出,父A ...


  • PNG图像的压缩算法

    PNG 图像格式的压缩算法 便携式网络图形(Portable Network Graphics)简称为PNG ,它是一种无损压缩的位图图形格式,其含有以下几种特性: 1. 支持256色调色板技术以产生小体积文件 2. 支持最高48位真彩色图 ...


  • 海关监管场所管理办法

    中华人民共和国海关监管场所管理办法 中华人民共和国海关总署令 第 171 号 <中华人民共和国海关监管场所管理办法>已于2008年1月4日经海关总署署务会议审议通过,现予公布,自2008年3月1日起施行. 署 长 牟新生 二○○ ...


  • 西门子200系列总结100527

    西门子200系列总结 就在程序编写过程中认为需要注意的基础性知识重新总结一下,也供大家参考. 1.电量换算(输入量要换算成程序识别的数字量) . ............................................... ...


  • 初中信息技术课本

    模块一: 信息技术理论部分 第一节 :键盘和鼠标的认识及应用 一. 键盘介绍 键盘是目前计算机主要的输入设备,计算机所要处理的信息,大部分通过键盘来实现的. 二. 键盘的分区 键盘上的108个键主要分成四个区: 主键盘区(打字键区).功能键 ...