• SharedPreferences


    一.SharedPreferences基本

    要想使用SharedPreferences 来存储数据,首先需要获取到SharedPreferences对象。Android 中主要提供了三种方法用于得到SharedPreferences 对象。

    1. Context 类中的getSharedPreferences()方法此方法接收两个参数,第一个参数用于指定SharedPreferences 文件的名称,如果指定的文件不存在则会创建一个, SharedPreferences 文件都是存放在/data/data/<package name>/shared_prefs/目录下的。第二个参数用于指定操作模式,主要有两种模式可以选择,MODE_PRIVATE 和MODE_MULTI_PROCESS。MODE_PRIVATE 仍然是默认的操作模式,和直接传入0 效果是相同的,表示只有当前的应用程序才可以对这个SharedPreferences 文件进行读写。MODE_MULTI_PROCESS 则一般是用于会有多个进程中对同一个SharedPreferences 文件进行读写的情况。类似地MODE_WORLD_READABLE 和MODE_WORLD_WRITEABLE 这两种模式已在Android 4.2 版本中被废弃。

    2. Activity 类中的getPreferences()方法

    这个方法和Context 中的getSharedPreferences()方法很相似,不过它只接收一个操作模式参数, 因为使用这个方法时会自动将当前活动的类名作为SharedPreferences 的文件名。

    3. PreferenceManager 类中的getDefaultSharedPreferences()方法这是一个静态方法,它接收一个Context 参数,并自动使用当前应用程序的包名作为前缀来命名SharedPreferences 文件。

    得到了SharedPreferences 对象之后,就可以开始向SharedPreferences 文件中存储数据了,主要可以分为三步实现。

    (1). 调用SharedPreferences 对象的edit() 方法来获取一个SharedPreferences.Editor 对象。

    (2). 向SharedPreferences.Editor 对象中添加数据,比如添加一个布尔型数据就使用putBoolean 方法,添加一个字符串则使用putString()方法,以此类推。

    (3). 调用commit()方法将添加的数据提交,从而完成数据存储操作。

    从SharedPreferences 文件中读取数据更加的简单。SharedPreferences 对象中提供了一系列的get 方法用于对存储的数据进行读取,每种get方法都对应了SharedPreferences. Editor 中的一种put 方法,比如读取一个布尔型数据就使用getBoolean()方法,读取一个字符串就使用getString()方法。这些get 方法都接收两个参数,第一个参数是键,传入存储数据时使用的键就可以得到相应的值了,第二个参数是默认值,即表示当传入的键找不到对应的值时,会以什么样的默认值进行返回。

    二.程序示例

    1.实现一个登陆框,如果勾选记住密码,则将密码保存起来,示意图

     

    2.布局文件activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>

    <TableLayout

        xmlns:android="http://schemas.android.com/apk/res/android"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:stretchColumns="1"

        <TableRow>

            <TextView android:layout_height="wrap_content"

                      android:text="用户登录"

                      android:layout_span="2"

                      android:gravity="center"

                      android:padding="15dp"

                      android:layout_margin="15dp"/>

        </TableRow>

        <TableRow>

            <TextView android:layout_height="wrap_content"

                      android:text="用户名"

                android:textSize="18sp"

                      android:paddingRight="15dp"

                      android:paddingLeft="5dp"/>

            <EditText android:id="@+id/username"

                      android:layout_height="wrap_content"

                      android:hint="请输入账号"

                      />

        </TableRow>

        <TableRow>

            <TextView android:layout_height="wrap_content"

                      android:text="密码"

                      android:textSize="18sp"

                android:paddingRight="15dp"

                      android:paddingLeft="5dp"/>

            <EditText android:id="@+id/password"

                      android:layout_height="wrap_content"

                      android:hint="请输入密码"

                      android:inputType="textPassword"

                      />

        </TableRow>

        <TableRow>

        <CheckBox android:layout_height="wrap_content"

            android:text="记住密码"

            android:layout_span="2"

            android:id="@+id/remember"/>

        </TableRow>

        <TableRow>

            <Button android:id="@+id/btn"

                    android:text="登录"

                    android:layout_height="wrap_content"

                    android:layout_span="2"/>

        </TableRow>

    </TableLayout>

    3.MainActivity:

    public class MainActivity extends Activity {

        private  SharedPreferences preferences;

        private  SharedPreferences.Editor editor;

        private EditText username,password;

        private Button btn;

        private CheckBox remember;

        @Override

        protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);

            setContentView(R.layout.activity_main);

            preferences = PreferenceManager.getDefaultSharedPreferences(this);

            // 初始化控件

            username = (EditText)findViewById(R.id.username);

            password = (EditText)findViewById(R.id.password);

            remember = (CheckBox)findViewById(R.id.remember);

            btn = (Button)findViewById(R.id.btn);

            boolean isRemember = preferences.getBoolean("remember_password", false);

            if( isRemember ){

                String account = preferences.getString("username", "");

                String pwd = preferences.getString("password", "");

                username.setText(account);

                password.setText(pwd);

                remember.setChecked(true);

            }

            btn.setOnClickListener(new View.OnClickListener() {

                @Override

                public void onClick(View v) {

                    String account = username.getText().toString();

                    String pwd = password.getText().toString();

                    if( account.equals("admin") && pwd.equals("123456") ){

                        editor = preferences.edit();

                        if( remember.isChecked() ){

                            editor.putBoolean("remember_password", true);

                            editor.putString("username", account);

                            editor.putString("password", pwd);

                        }else{

                            editor.clear();

                        }

                        editor.commit();

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

                        startActivity(intent);

                    }else{

                        Toast.makeText(MainActivity.this, "登录错误", Toast.LENGTH_LONG).show();

                    }

                }

            });

        }

    }

  • 相关阅读:
    anaconda版本与python版本对应关系查询网址
    非官方windows二进制Python拓展包
    vscode每次打开文件,出现git弹窗,login i revparse showtoplevel,打印revparse:no such file or directory
    Python 官方文档
    转:Oracle EBS借贷关系
    中文分词的简要实现
    Thinkpad为什么是Thinkpad
    中文分词的应用——网站热点分析
    Blog工具:Zoundry blog writer and GreatNews RSS reader
    SpringBoot校验请求Json参数
  • 原文地址:https://www.cnblogs.com/itfenqing/p/6739758.html
Copyright © 2020-2023  润新知