zoukankan      html  css  js  c++  java
  • android之sharedpreference的两种使用方法

    sharedPreferences的介绍:

    1.sharedPreferences是一种轻型的数据存储方式,它的本质是基于xml文件存储key-value键值对数据,通常用来存储一些简单的配置信息,其存储位置在/data/data/<包名>/shared_prefs目录下。sharedPreferences对象本身只能获取数据而不支持存储和修改,存储和修改是通过Editor对象实现的。

    2.sharedpreferences对象对比sqlite数据库,免去了创建数据库,创建表,写SQL语句等操作,更加易用,但sharedpreference仅支持以下数据类型:

    boolean  int   float   long   String

    但是无法进行条件查询等,所以不论sharedpreference的数据存储是如何简单,它也只能是存储方式的一种补充,而无法完全替代如sqlite数据库等其他数据存储方式。

    3.sharedPreferences的使用:包含两种方法:直接使用和通过xml文件使用

    (1)直接使用:

      a.首先定义一个SharedPreferences对象以及Editor对象,因为我们知道SharedPreferences对象是通过Editor对象来修改的:

    private SharedPreferences preferences;
    private SharedPreferences.Editor editor;
      b.对定义的两个对象初始化:我们看到prefrences通过getPreferences()和传入一个MODE_PRIVATE来获取,其实传入的参数有两个,MODE_PRIVATE表示为默认,还有个参数为MODE_MULTI_PROCESS,这个一般用于会有多个进程对同一个sharedpreference进行读写的情况下
    preferences=getPreferences(MODE_PRIVATE);
    editor=preferences.edit();
      c.进行读写操作:
       写操作:使用起来很简单,只要通过editor调用putstring函数来添加数据,然后再调用commit即可。
    private String KEY="myKey";
    editor.putString(KEY,editText.getText().toString());
    if (editor.commit()){
    Toast.makeText(MainActivity.this,"写入成功",Toast.LENGTH_SHORT).show();
    }
       读操作:使用preference对象通过getstring函数,第一个参数为我们写操作时设定的KEY值,第二参数为数据不存在时,默认值
    String data=preferences.getString(KEY,"数据不存在");
    Toast.makeText(MainActivity.this,data,Toast.LENGTH_SHORT).show();
      d.完整代码如下:
    MainActivity.java
     1 package base.learnsharedprefence;
     2 
     3 import android.content.Intent;
     4 import android.content.SharedPreferences;
     5 import android.preference.PreferenceActivity;
     6 import android.support.v7.app.AppCompatActivity;
     7 import android.os.Bundle;
     8 import android.view.View;
     9 import android.widget.EditText;
    10 import android.widget.Toast;
    11 
    12 public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    13     private SharedPreferences preferences;
    14     private SharedPreferences.Editor editor;
    15     private EditText editText;
    16     private String KEY="myKey";
    17     @Override
    18     protected void onCreate(Bundle savedInstanceState) {
    19         super.onCreate(savedInstanceState);
    20         setContentView(R.layout.activity_main);
    21         preferences=getPreferences(MODE_PRIVATE);
    22         editor=preferences.edit();
    23         editText= (EditText) findViewById(R.id.edit);
    24         findViewById(R.id.btnRead).setOnClickListener(this);
    25         findViewById(R.id.btnWrite).setOnClickListener(this);
    26         findViewById(R.id.btnJump).setOnClickListener(this);
    27     }
    28 
    29     @Override
    30     public void onClick(View v) {
    31         switch (v.getId()){
    32             case R.id.btnRead:
    33                 String data=preferences.getString(KEY,"数据不存在");
    34                 Toast.makeText(MainActivity.this,data,Toast.LENGTH_SHORT).show();
    35                 break;
    36             case R.id.btnWrite:
    37                 editor.putString(KEY,editText.getText().toString());
    38                 if (editor.commit()){
    39                     Toast.makeText(MainActivity.this,"写入成功",Toast.LENGTH_SHORT).show();
    40                 }
    41                 break;
    42             case R.id.btnJump:
    43                 startActivity(new Intent(MainActivity.this, MyPreferenceActivity.class));
    44                 break;
    45         }
    46     }
    47 }
    View Code

    布局文件:

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     xmlns:tools="http://schemas.android.com/tools"
     4     android:layout_width="match_parent"
     5     android:layout_height="match_parent"
     6     android:orientation="vertical"
     7     tools:context="base.learnsharedprefence.MainActivity">
     8 
     9     <EditText
    10         android:textSize="20sp"
    11         android:id="@+id/edit"
    12         android:layout_width="match_parent"
    13         android:layout_height="wrap_content" />
    14     <Button
    15         android:textSize="20sp"
    16         android:text="@string/read"
    17         android:id="@+id/btnRead"
    18         android:layout_width="match_parent"
    19         android:layout_height="wrap_content" />
    20     <Button
    21         android:id="@+id/btnWrite"
    22         android:text="@string/write"
    23         android:textSize="20sp"
    24         android:layout_width="match_parent"
    25         android:layout_height="wrap_content" />
    26     <Button
    27         android:textSize="20sp"
    28         android:text="@string/preferenceactivity"
    29         android:id="@+id/btnJump"
    30         android:layout_width="match_parent"
    31         android:layout_height="wrap_content" />
    32 </LinearLayout>
    View Code

      e.效果图:

      

      d.查看方式:点击问号左边图标,知道data/data/包名/shared_prefs,右上角可以导出到电脑中查看

      

      

    (2)通过xml文件来定义:

      a.先在res目录下创建一个xml文件夹,然后再里面创建一个xml文件:这里主要讲解三种常用的控件,checkboxpreference  listpreference  edittextpreference

    checkboxpreference:

    <CheckBoxPreference            
    android:key="checkbox"
    android:title="是否开启"
    android:summaryOn="已经开启"
    android:summaryOff="已经关闭"
    />                  

    第一个参数为key值,必须要定义,剩下的三个参数对比图像应该很清楚。

    listpreference:

    <ListPreference
    android:key="list"
    android:title="选择一个选项"
    android:summary="请点击选择"
    android:entries="@array/entries"
    android:entryValues="@array/values"/>

      

    第一个参数也是为key,必须定义,title和summary属性很清楚,主要是entries和entryvalues这两个属性,我们可以看到他们都是调用了array中的内容,所以我们是要先在res/values/下定义一个xml文件,内容如下:

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <resources>
     3     <string-array name="entries">
     4         <item>Java</item>
     5         <item>Swift</item>
     6         <item>C#</item>
     7     </string-array>
     8     <string-array name="values">
     9         <item>Eclips</item>
    10         <item>Xcode</item>
    11         <item>Visual Studio</item>
    12     </string-array>
    13 </resources>
    View Code

    edittextpreference:

    <EditTextPreference
    android:key="edit"
    android:dialogTitle="请输入你的名字"
    android:dialogMessage="有劳了"
    android:summary="请在此处输入"
    android:title="请输入"/>

     b.实现完布局文件后,我们就要是去加载它,创建一个类继承PreferenceActivity

      (1)定义控件和管理者:

    private PreferenceManager manager;
    private CheckBoxPreference checkBoxPreference;
    private ListPreference listPreference;
    private EditTextPreference editTextPreference;
    (2)加载定义的布局文件:
    addPreferencesFromResource(R.xml.mypreference);
    (3)实例化控件:我们可以看到实例化方式和普通控件的实例化方式有些不同,这里传入的是一个字符串,即是KEY值,所以我们之前在布局文件中强调一定要定义KEY值就是为了之后的实例化使用
    manager=getPreferenceManager();
    checkBoxPreference= (CheckBoxPreference)manager.findPreference("checkbox");
    listPreference= (ListPreference) manager.findPreference("list");
    editTextPreference= (EditTextPreference) manager.findPreference("edit");

     (4)获取到相关数据,并打印出来:

    System.out.println("当前状态为:"+checkBoxPreference.isChecked());
    System.out.println(listPreference.getEntry()+"的开发环境是"+listPreference.getValue());
    System.out.println("你输入的内容是"+editTextPreference.getText());
    (5)最好注意要在mainfest定义:
    <activity android:name=".MyPreferenceActivity"/>

    完整代码:
    MyPreferenceActivity:
     1 package base.learnsharedprefence;
     2 
     3 import android.os.Bundle;
     4 import android.preference.CheckBoxPreference;
     5 import android.preference.EditTextPreference;
     6 import android.preference.ListPreference;
     7 import android.preference.PreferenceActivity;
     8 import android.preference.PreferenceManager;
     9 import android.widget.Toast;
    10 
    11 public class MyPreferenceActivity extends PreferenceActivity {
    12     private PreferenceManager manager;
    13     private CheckBoxPreference checkBoxPreference;
    14     private ListPreference listPreference;
    15     private EditTextPreference editTextPreference;
    16     @Override
    17     protected void onCreate(Bundle savedInstanceState) {
    18         super.onCreate(savedInstanceState);
    19         addPreferencesFromResource(R.xml.mypreference);
    20         manager=getPreferenceManager();
    21         checkBoxPreference= (CheckBoxPreference)manager.findPreference("checkbox");
    22         listPreference= (ListPreference) manager.findPreference("list");
    23         editTextPreference= (EditTextPreference) manager.findPreference("edit");
    24         System.out.println("当前状态为:"+checkBoxPreference.isChecked());
    25         System.out.println(listPreference.getEntry()+"的开发环境是"+listPreference.getValue());
    26         System.out.println("你输入的内容是"+editTextPreference.getText());
    27     }
    28 }
    View Code

    mypreference.xml:

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
     3     <CheckBoxPreference
     4         android:key="checkbox"
     5         android:title="是否开启"
     6         android:summaryOn="已经开启"
     7         android:summaryOff="已经关闭"
     8         />
     9     <ListPreference
    10         android:key="list"
    11         android:title="选择一个选项"
    12         android:summary="请点击选择"
    13         android:entries="@array/entries"
    14         android:entryValues="@array/values"/>
    15     <EditTextPreference
    16         android:key="edit"
    17         android:dialogTitle="请输入你的名字"
    18         android:dialogMessage="有劳了"
    19         android:summary="请在此处输入"
    20         android:title="请输入"/>
    21 </PreferenceScreen>
    View Code
    
    
    
    
    
    
    
    
    
    


  • 相关阅读:
    StrToInt && StrToHex && IntToString && 编辑框格式 .
    DAO简介(MFC) .
    RedrawWindow, UpdateWindow,InvalidateRect 用法
    在MFC中获取窗口\视图句柄 &获取当前活动的CView .
    DAO在MFC中的应用实例 .
    捕获异常 .
    ubuntu下chm和PDF阅读器 « 小居
    QQ登陆功能的实现2 rolends1986 博客园
    【原创】说说JSON和JSONP,也许你会豁然开朗,含jQuery用例 随它去吧 博客园
    PDF Ubuntu中文
  • 原文地址:https://www.cnblogs.com/xy95/p/5993554.html
Copyright © 2011-2022 走看看