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

來源:互聯網
上載者:User

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     @Override18     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     @Override30     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     <EditText10         android:textSize="20sp"11         android:id="@+id/edit"12         android:layout_width="match_parent"13         android:layout_height="wrap_content" />14     <Button15         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     <Button21         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     <Button27         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     @Override17     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     <ListPreference10         android:key="list"11         android:title="選擇一個選項"12         android:summary="請點擊選擇"13         android:entries="@array/entries"14         android:entryValues="@array/values"/>15     <EditTextPreference16         android:key="edit"17         android:dialogTitle="請輸入你的名字"18         android:dialogMessage="有勞了"19         android:summary="請在此處輸入"20         android:title="請輸入"/>21 </PreferenceScreen>
View Code

 

 



 

 

 

 




 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.