zoukankan      html  css  js  c++  java
  • 一手遮天 Android

    项目地址 https://github.com/webabcd/AndroidDemo
    作者 webabcd

    一手遮天 Android - 存储: SharedPreferences 用户偏好数据的管理

    示例如下:

    /storage/SharedPreferencesDemo1.java

    /**
     * SharedPreferences 用户偏好数据的管理
     *
     *
     * 通过 SharedPreferences 在 /data/data/packagename/shared_prefs 中管理 xml 文件,每个 xml 文件中可以保存多条 key/value 数据
     * 实例化 SharedPreferences 对象时,指定的文件名不需包含后缀名,因为 SharedPreferences 管理的都是 xml 格式的文件,它会自动为文件添加 .xml 后缀名
     * 通过 SharedPreferences 是无法删除 shared_prefs 中的文件的(但是可以删除文件中的数据),需要通过 File 对象来删除文件
     *
     *
     * 注:如果用户在设置中的“应用信息”中单击“清除数据”的话,会删除 shared_prefs 中的全部文件
     */
    
    package com.webabcd.androiddemo.storage;
    
    import android.content.Context;
    import android.content.SharedPreferences;
    import androidx.appcompat.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    
    import com.webabcd.androiddemo.R;
    
    import java.io.File;
    
    public class SharedPreferencesDemo1 extends AppCompatActivity {
    
        // 需要操作的 shared_prefs 中的文件名(不需要后缀名)
        private final String FILE_NAME = "myTest";
    
        private Button mButton1;
        private Button mButton2;
        private Button mButton3;
        private Button mButton4;
        private TextView mTextView1;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_storage_sharedpreferencesdemo1);
    
            mButton1 = findViewById(R.id.button1);
            mButton2 = findViewById(R.id.button2);
            mButton3 = findViewById(R.id.button3);
            mButton4 = findViewById(R.id.button4);
            mTextView1 = findViewById(R.id.textView1);
    
            sample();
        }
    
        private void sample() {
            // 在 shared_prefs 的指定文件中,保存多条 key/value 数据
            mButton1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // 通过指定的文件名实例化 SharedPreferences 对象(指定文件名时不需包含后缀名,SharedPreferences 保存的都是 xml 格式的文件,会自动为其添加 .xml 后缀名)
                    SharedPreferences sp = SharedPreferencesDemo1.this.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
                    // 通过 SharedPreferences.Editor 保存数据或删除数据
                    SharedPreferences.Editor editor = sp.edit();
    
                    // 通过 key/value 的形式在当前文件中保存如下类型的数据,可以同时保存多条数据
                    // putString(), putBoolean(), putFloat(), putInt(), putLong(), putStringSet()
                    editor.putString("myKey", "myValue");
                    editor.putString("myKey2", "myValue2");
    
                    // 保存(同步)
                    boolean result = editor.commit();
                    // 保存(异步)
                    // editor.apply();
    
                    mTextView1.setText("保存成功");
                }
            });
    
            // 从 shared_prefs 的指定文件中,读取指定 key 的数据
            mButton2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // 通过指定的文件名实例化 SharedPreferences 对象
                    SharedPreferences sp = SharedPreferencesDemo1.this.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
    
                    // 获取当前文件中的全部 key/value 数据
                    // sp.getAll();
    
                    // contains() - 当前文件中是否包含指定 key 的数据
                    if (sp.contains("myKey")) {
                        mTextView1.setText("读取成功
    ");
                        // 获取当前文件中各种类型的指定 key 的数据
                        // getString(), getBoolean(), getFloat(), getInt(), getLong(), getStringSet()
                        mTextView1.append(sp.getString("myKey", "defaultValue"));
                        mTextView1.append("
    ");
                    } else {
                        mTextView1.setText("没有发现 key 为“myKey”的数据");
                    }
    
                    mTextView1.append(sp.getString("myKey2", "defaultValue2"));
                    mTextView1.append("
    ");
                    // 找不到指定 key 的数据则返回指定的默认值
                    mTextView1.append(sp.getString("myKey3", "defaultValue3"));
                }
            });
    
            // 从 shared_prefs 的指定文件中,删除指定 key 的数据
            mButton3.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // 通过指定的文件名实例化 SharedPreferences 对象
                    SharedPreferences sp = SharedPreferencesDemo1.this.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
                    // 通过 SharedPreferences.Editor 保存数据或删除数据
                    SharedPreferences.Editor editor = sp.edit();
    
                    // 删除当前文件中指定 key 的数据
                    // editor.remove("myKey");
                    // 删除当前文件中的全部数据(不会删除文件本身)
                    editor.clear();
    
                    // 保存(同步)
                    boolean result = editor.commit();
                    // 保存(异步)
                    // editor.apply();
    
                    mTextView1.setText("数据删除成功");
                }
            });
    
            // 删除 shared_prefs 中的文件
            mButton4.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // 通过 File 对象删除 shared_prefs 中的文件
                    File file= new File("/data/data/" + getPackageName() + "/shared_prefs",FILE_NAME + ".xml");
                    if (file.exists()) {
                        file.delete();
                    }
    
                    mTextView1.setText("文件删除成功");
                }
            });
        }
    }
    
    

    /layout/activity_storage_sharedpreferencesdemo1.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAllCaps="false"
            android:text="在 shared_prefs 的指定文件中,保存多条 key/value 数据" />
    
        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAllCaps="false"
            android:text="从 shared_prefs 的指定文件中,读取指定 key 的数据" />
    
        <Button
            android:id="@+id/button3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAllCaps="false"
            android:text="从 shared_prefs 的指定文件中,删除指定 key 的数据" />
    
        <Button
            android:id="@+id/button4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAllCaps="false"
            android:text="删除 shared_prefs 中的文件" />
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    
    </LinearLayout>
    
    

    项目地址 https://github.com/webabcd/AndroidDemo
    作者 webabcd

  • 相关阅读:
    题解 CF171G 【Mysterious numbers
    题解 P1157 【组合的输出】
    题解 P3955 【图书管理员】
    题解 P2036 【Perket】
    题解 CF837A 【Text Volume】
    题解 CF791A 【Bear and Big Brother】
    题解 CF747A 【Display Size】
    题解 P1332 【血色先锋队】
    题解 P2660 【zzc 种田】
    题解 P4470 【[BJWC2018]售票】
  • 原文地址:https://www.cnblogs.com/webabcd/p/android_storage_SharedPreferencesDemo1.html
Copyright © 2011-2022 走看看