|
1.SharedPreferences 本身是一個(gè)接口,程序無法直接創(chuàng)建SharedPreferences實(shí)例,只能通過Context提供的getSharedPreferences(String name,int mode)來獲取該實(shí)例
該方法的第二個(gè)參數(shù)可以設(shè)置模式有:
(1).Context.MODE_PRIVATE:指定該SharedPreferences數(shù)據(jù)只能被應(yīng)用程序讀寫
(2).Context.MODE_WORLD_READABLE:指定該SharedPreferences數(shù)據(jù)能被其他應(yīng)用程序讀,但不能寫。
(3).Context,MODE_WORLD_WRITEABLE:指定該SharedPreferences數(shù)據(jù)能被其他應(yīng)用程序讀寫。
從Android 4.2 模式(2)、(3)就不再推薦使用。 - public class LoginActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener {
-
- // SharedPreferences 使用規(guī)則:
- // 1. 存儲(chǔ)方式:保存到文件中
- // 2. 存儲(chǔ)格式: Key-Value
- // 3. 存儲(chǔ)內(nèi)容: 不要過長(zhǎng),精簡(jiǎn)的
- // 4. 應(yīng)用場(chǎng)景: 配置字段、用戶信息、
-
- 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 在使用的時(shí)候,應(yīng)該先看一下是否保存過數(shù)據(jù)
-
-
- SharedPreferences sp =
- getSharedPreferences("app", MODE_PRIVATE);
-
- // 3.監(jiān)測(cè)是否有記住密碼的功能,同時(shí)設(shè)置 CheckBox的狀態(tài)變化
- 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();
-
- // 添加內(nèi)容到存儲(chǔ)區(qū)
- 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存儲(chǔ):Context提供了兩個(gè)方法來打開應(yīng)用程序的數(shù)據(jù)文件里的文件IO流
(1).FileInputStream openFileInput(String name): 打開應(yīng)用程序的數(shù)據(jù)文件夾下的name文件對(duì)應(yīng)的輸入流
(2).FileOutputStream openFileOutput(String name,int mode):打開應(yīng)用程序的數(shù)據(jù)文件夾下的那么文件對(duì)應(yīng)的輸出流
<1>MODE_PRIVATE: 該文件只能被當(dāng)前程序讀寫
<2>MODE_APPEND:以追加的方式打開該文件,應(yīng)用程序可以向該文件中追加內(nèi)容。
<3>MODE_WORLD_READABLE:該文件的內(nèi)容可以被其他程序讀取
<4>MODE_WORLD_WRITEABLE:該文件的內(nèi)容可以被其他程序讀寫
android 4.2開始<3>、<4>不再推薦使用
3.讀寫SD卡上的文件
(1).Environment.getExternalStorageState();// 1. 監(jiān)測(cè)當(dāng)前手機(jī)是否包含存儲(chǔ)卡, 所有外部存儲(chǔ)的操作都需要在清單文件聲明權(quán)限
(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. 監(jiān)測(cè)當(dāng)前手機(jī)是否包含存儲(chǔ)卡,
- // 所有外部存儲(chǔ)的操作都需要在清單文件聲明權(quán)限
- String state = Environment.getExternalStorageState();
- // 根據(jù)狀態(tài)判斷是否有外部存儲(chǔ)
- if (Environment.MEDIA_MOUNTED.equals(state)) {
- // 外部存儲(chǔ)已經(jīng)掛載,可以訪問和使用
-
- // 2. 獲取外部存儲(chǔ)的根目錄
- File directory = Environment.getExternalStorageDirectory();
-
- Log.d("ExternalActivity", "外部存儲(chǔ)目錄 " + directory.getAbsolutePath());
-
-
- // 3. 獲取外部存儲(chǔ),公共目錄
- 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. 外部存儲(chǔ)可以獲取 應(yīng)用程序特定的一些目錄,類似于內(nèi)部存儲(chǔ)的路勁
- // /外部根目錄/Android/data/包名/
- // 使用上下文 Context來獲取
-
- getExternalCacheDir();
-
- // 獲取外部存儲(chǔ)區(qū)中,應(yīng)用程序自身 files 目錄內(nèi)部的文件夾
- // 如果傳遞的參數(shù)為 null,直接返回 files 目錄,
- // 否則 files/xxxx 目錄
- getExternalFilesDir("images");
- }
- }
- }
|