Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> android之sharedpreference的兩種使用方法,sharedpreference

android之sharedpreference的兩種使用方法,sharedpreference

編輯:關於android開發

android之sharedpreference的兩種使用方法,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

 

 



 

 

 

 




 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved