編輯:關於android開發
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
Android中MVP模式與MVC模式比較(含示例)
Android中MVP模式與MVC模式比較(含示例) MVP 介紹 MVP模式(Model-View-Presenter)是MVC模式的一個衍生。主要目的是為了解耦,使項
Android系統默認對話框添加圖片,
Android系統默認對話框添加圖片,開發工具Android Studio 今天公司UI要求軟件對話框改成加圖片的,以前沒有做過,所以就學習了一下,廢話不多說, 看效果:
Android 手機衛士--簽名文件說明&包名說明,android衛士
Android 手機衛士--簽名文件說明&包名說明,android衛士在《Android 手機衛士--打包生成apk維護到服務器》一文中,實現了新版本的apk到服
Android Sqlite基本命令,androidsqlite命令
Android Sqlite基本命令,androidsqlite命令要查看數據庫,首先必須要找到db文件,如果拷貝到電腦上,查看的方法比較多,在手機上,用命令查看比較直接