SharedPreferences的存储位置和格式 您所在的位置:网站首页 sharedpreferences采用什么方式存储数据 SharedPreferences的存储位置和格式

SharedPreferences的存储位置和格式

2023-09-12 22:40| 来源: 网络整理| 查看: 265

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)就不再推荐使用。

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卡的目录  

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"); } } }



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有