• Android开发手记(16) 数据存储一 SharedPreferences


    Android为数据存储提供了五种方式:

    1、SharedPreferences

    2、文件存储

    3、SQLite数据库

    4、ContentProvider

    5、网络存储

      

      SharedPreferences是Android中最容易理解的数据存储技术,实际上SharedPreferences处理的就是一个key-value(键值对)SharedPreferences常用来存储一些轻量级的数据。这类似于C++中Map的数据存储方式(实际上在最后生成的.xml文件内,就是以Map格式存储的)。

      获取SharedPreferences的两种方式:

        1、调用Context对象的getSharedPreferences()方法

        2、调用Activity对象的getPreferences()方法

      两种方式的区别:

        调用Context对象的getSharedPreferences()方法获得的SharedPreferences对象可以被同一应用程序下的其他组件共享。

        调用Activity对象的getPreferences()方法获得的SharedPreferences对象只能在该Activity中使用。

      其中,getSharedPreferences()的方法原型为:

    getSharedPreferences(String name, int mode);
    // name: 生成xml文件的名称
    // MODE_PRIVATE: 为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容 // MODE_APPEND: 模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件. // MODE_WORLD_READABLE: 表示当前文件可以被其他应用读取,不推荐使用 // MODE_WORLD_WRITEABLE: 表示当前文件可以被其他应用写入,不推荐使用

      使用SharedPreferences存储数据的方法如下:

    //实例化SharedPreferences对象(第一步) 
    SharedPreferences sp = getSharedPreferences("test", MODE_PRIVATE); 
    //实例化SharedPreferences.Editor对象(第二步) 
    SharedPreferences.Editor editor = mySharedPreferences.edit(); 
    //用putString的方法保存数据 
    editor.putString("UserName", etName.getText().toString());
    editor.putString("Password", etPassword.getText().toString());
    //提交当前数据 
    //editor.apply();
    editor.commit(); 
    //使用toast信息提示框提示成功写入数据 
    Toast.makeText(MainActivity.this, "注册成功", Toast.LENGTH_LONG).show();

      使用SharedPreferences读取数据的方法如下:

    SharedPreferences sp = getSharedPreferences(strLogInfo, MODE_APPEND);
    String name = sp.getString("UserName", "");
    String passwd = sp.getString("Password","");
    if(etName.getText().toString().equals(name) && etPassword.getText().toString().equals(passwd)){
            Toast.makeText(MainActivity.this, "登陆成功", Toast.LENGTH_LONG).show();
    } else{
            Toast.makeText(MainActivity.this, "登录失败", Toast.LENGTH_LONG).show();
    }

      在使用SharedPreferences之后,程序会在“/data/data/包名/shared_prefs/xxx.xml”生成的一个XML文件。文件名取决于getSharedPreferences的第一个参数名。

    1 <?xml version='1.0' encoding='utf-8' standalone='yes' ?>
    2 <map>
    3     <string name="UserName">Name</string>
    4     <string name="Password">Password</string>
    5 </map>

      完整代码如下:

     1 import android.content.SharedPreferences;
     2 import android.support.v7.app.AppCompatActivity;
     3 import android.os.Bundle;
     4 import android.view.View;
     5 import android.widget.Button;
     6 import android.widget.EditText;
     7 import android.widget.Toast;
     8 
     9 public class MainActivity extends AppCompatActivity {
    10 
    11     private EditText etName;
    12     private EditText etPassword;
    13     private Button btnLogin;
    14     private Button btnLogup;
    15     private String strLogInfo = "test";
    16 
    17     @Override
    18     protected void onCreate(Bundle savedInstanceState) {
    19         super.onCreate(savedInstanceState);
    20         setContentView(R.layout.activity_main);
    21 
    22         etName = (EditText)findViewById(R.id.etName);
    23         etPassword = (EditText)findViewById(R.id.etPassword);
    24         btnLogin = (Button)findViewById(R.id.btnLogin);
    25         btnLogup = (Button)findViewById(R.id.btnLogup);
    26 
    27         btnLogup.setOnClickListener(new View.OnClickListener() {
    28             @Override
    29             public void onClick(View view) {
    30                 SharedPreferences sp = getSharedPreferences(strLogInfo, MODE_APPEND);
    31                 SharedPreferences.Editor editor = sp.edit();
    32 
    33                 editor.putString("UserName", etName.getText().toString());
    34                 editor.putString("Password", etPassword.getText().toString());
    35                 editor.commit();
    36                 Toast.makeText(MainActivity.this, "注册成功", Toast.LENGTH_LONG).show();
    37             }
    38         });
    39         btnLogin.setOnClickListener(new View.OnClickListener() {
    40             @Override
    41             public void onClick(View view) {
    42                 SharedPreferences sp = getSharedPreferences(strLogInfo, MODE_APPEND);
    43                 String name = sp.getString("UserName", "");
    44                 String passwd = sp.getString("Password","");
    45                 if(etName.getText().toString().equals(name) && etPassword.getText().toString().equals(passwd)){
    46                     Toast.makeText(MainActivity.this, "登陆成功", Toast.LENGTH_LONG).show();
    47                 } else{
    48                     Toast.makeText(MainActivity.this, "登录失败", Toast.LENGTH_LONG).show();
    49                 }
    50             }
    51         });
    52 
    53     }
    54 }
  • 相关阅读:
    mktemp -t -d用法
    使用getopts处理输入参数
    linux中$1的意思
    linux中的set -e 与set -o pipefail
    在windows 7 和linux上安装xlwt和xlrd
    nginx map使用方法
    Linux crontab下关于使用date命令和sudo命令的坑
    东哥讲义
    ldapsearch使用
    date 命令之日期和秒数转换
  • 原文地址:https://www.cnblogs.com/doodle777/p/4918727.html
Copyright © 2020-2023  润新知