Android 之数据存储--SharedPreferences

在android中,谷歌为我们提供了三种数据持久化保存的三种方案。
 
SharedPreferencesSharedPreferences 对象指向了一个保存key-value pairs的文件,并且它提供了简单的方法来读写这个文件。

文件存储 文件存储是 Android 中最基本的一种数据存储方式,它不对存储的内容进行任何的格式化处理,所有数据都是原封不动地保存到文件当中的,因而它比较适合用于存储一些简单的文本数据或二进制数据。

SQLite 数据库存储:andorid内置的一个轻量级数据库,你可以sql语法来对数据进行较复杂的增删改查,一般适用于需要存储较复杂的数据结构。

这一节我们主要来讲解sharedPreference的使用方法 。

为了获得sharedPreference的持久化文件,android为我们提供了一些方法来创建该及操作持久化文件

要想使用SharedPreferences来存储数据, 首先需要获取到SharedPreferences对象。 Android中主要提供了三种方法用于得到 SharedPreferences 对象。
1. Context 类中的 getSharedPreferences()方法
          此方法接收两个参数,第一个参数用于指定 SharedPreferences文件的名称,如果指定的文件不存在则会创建一个,SharedPreferences 文件都是存放在/data/data/<packagename>/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 文件。
接下来我们就用一个实例来进行试验,实现一个记住密码及用户名的小应用。新建一个SharedPreferencesTest工程。
下面是登陆界面的逻辑,新建一个loginActivity类,添加如下代码:
import  android.widget.Toast;

public  class loginActivity   extends  Activity  implements  OnClickListener{
       
         private  SharedPreferences  share  ;
       
         private  SharedPreferences.Editor  edit  ;
       
         private  CheckBox  check  ;
       
         private  EditText  username  ;
       
         private  EditText  password  ;
       
         private  Button  send  ;
       
         @Override
         protected  void  onCreate(Bundle savedInstanceState) {
                //  TODO  Auto-generated method stub
                super .onCreate(savedInstanceState);
               setContentView(R.layout.  main );
                share =PreferenceManager.getDefaultSharedPreferences( this );//实例化 SharedPreferences对象
                check =(CheckBox) findViewById(R.id.  remember );
                username =(EditText) findViewById(R.id.  login_text );
                password =(EditText) findViewById(R.id.  login_password_text );
                send =(Button) findViewById(R.id.  send );
              
                boolean  judge= share  .getBoolean( "remember_password" ,  false );//获取judge中的值,如果没有值则默认为false
              
                if (judge){
                     String username_text=  share .getString(  "username" ,  ""  );
                     String password_text=  share .getString(  "password" ,  ""  );
                       username .setText(username_text);
                       password .setText(password_text);
                       check .setChecked(  true );
              }
                send .setOnClickListener(  this );
       }

         @Override
         public  void  onClick(View v) {
                //  TODO  Auto-generated method stub
                switch  (v.getId()) {
                case  R.id. send  :{
                     String username_text=  username .getText().toString();
                     String password_text=  password .getText().toString();
                       if (username_text.equals( "admin"  )&&password_text.equals( "123456" )){
                             edit =  share .edit();//实例化 SharedPreferences的操作对象,使他可以操作数据的增删改查
                             if ( check  .isChecked()){
                                    edit .putBoolean(  "remember_password" ,  true  );//添加数据
                                    edit .putString(  "username" , username_text);
                                    edit .putString(  "password" , username_text);
                           }  else {
                                    edit .clear();//如果checkbox没有打钩,则进行消除数据
                           }
                             edit .apply();
                           Intent intent =  new  Intent(loginActivity . this  ,MainActivity. class );
                           startActivity(intent);
                           finish();
                     }  else {
                           Toast. makeText(MyActivity. this ,  "account or password is invalid" , Toast. LENGTH_SHORT ).show();
                     }
                       break
              }
                default :
                       break ;
              }
       }
以下是main.xml的代码:
<? xml  version =  "1.0"  encoding  = "utf-8" ?>
< LinearLayout  xmlns:android = "http://schemas.android.com/apk/res/android"
     android:id = "@+id/login"
     android:layout_width =  "match_parent"
     android:layout_height =  "match_parent"
     android:orientation =  "vertical"  >

     < LinearLayout
         android:layout_width = "match_parent"
         android:layout_height = "wrap_content"  >

         < TextView
             android:id = "@+id/login_name"
             android:layout_width = "wrap_content"
             android:layout_height = "wrap_content"
             android:maxLines = "1"
             android:text = "用户名"
             android:textSize = "15sp"  />
              
         < EditText
             android:id = "@+id/login_text"
             android:layout_width = "0dp"
             android:hint = "用户名"
             android:layout_height = "wrap_content"
             android:layout_weight = "1"
             android:lines = "1"  />

     </ LinearLayout  >
       
      < LinearLayout
          android:layout_width = "match_parent"
          android:layout_height = "wrap_content"  >

         < TextView
             android:id = "@+id/login_password"
             android:layout_width = "wrap_content"
             android:layout_height = "wrap_content"
             android:maxLines = "1"
             android:minLines = "1"
             android:padding = "10dp"
             android:text = "密码"
             android:textSize = "15sp"  />
              
         < EditText
             android:id = "@+id/login_password_text"
             android:layout_width = "0dp"
             android:layout_height = "wrap_content"
             android:layout_weight = "1"
             android:hint = "密码"
             android:inputType = "textPassword"
             android:lines = "1"  />

     </ LinearLayout  >

    
      < LinearLayout
          android:layout_width = "match_parent"
          android:layout_height = "wrap_content"
          android:orientation = "vertical"  >
       
          < CheckBox
             android:id = "@+id/remember"
             android:layout_width = "wrap_content"
             android:layout_height = "wrap_content"
             android:text = "记住密码"  />
        
         < Button
          android:id = "@+id/send"
          android:layout_width = "match_parent"
          android:layout_height = "wrap_content"
          android:text = "登陸"  />

      </ LinearLayout  >
   
</ LinearLayout >

再在AndroidManifest.xml中将loginActivity添加进去即可看到运行结果
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值