?
Ce document utilise Manuel du site Web PHP chinois Libérer
SharedPreferences
翻譯版本:2010-11-1
結(jié)構(gòu)
繼承關(guān)系
public interface SharedPreferences
????????
android.content.SharedPreferences
?
類概述
用于訪問(wèn)和修改getSharedPreferences(String, int)返回偏好設(shè)置數(shù)據(jù)(preference data)的一個(gè)接口。對(duì)于任何一組特殊的preferences,所有的客戶端共享一個(gè)此類單獨(dú)的實(shí)例。
修改Preferences必須通過(guò)一個(gè)SharedPreferences.Editor對(duì)象,以確保當(dāng)他們提交存儲(chǔ)數(shù)據(jù)的操作時(shí),preference值保持一致的狀態(tài)。
注意:當(dāng)前此類不支持多線程訪問(wèn)。后續(xù)將添加。
(譯者注:這里譯為” 偏好設(shè)定”,類似于ini文件,用于保存應(yīng)用程序的屬性設(shè)置)
參見
???????? getSharedPreferences(String, int)
?
內(nèi)部類
???????? interface ?SharedPreferences.Editor ?
用于修改SharedPreferences對(duì)象設(shè)定值的接口。
?
interface ?SharedPreferences.OnSharedPreferenceChangeListener
接口定義一個(gè)用于在偏好設(shè)定(shared preference)改變時(shí)調(diào)用的回調(diào)函數(shù)。
?
公共方法
public abstract boolean contains (String key)
判斷preferences是否包含一個(gè)preference。
參數(shù)
key 想要判斷的preference的名稱
返回值
如果preferences中存在preference,則返回true,否則返回false。
?
public abstract SharedPreferences.Editor edit ()
針對(duì)preferences創(chuàng)建一個(gè)新的Editor對(duì)象,通過(guò)它你可以修改preferences里的數(shù)據(jù),并且原子化的將這些數(shù)據(jù)提交回SharedPreferences對(duì)象。(譯者注:原子化——作為一個(gè)整體提交,原子性)
注意:如果你想要在SharedPreferences中實(shí)時(shí)顯示,剛通過(guò)Editor對(duì)象進(jìn)行的修改,那么你必須調(diào)用commit()方法。
返回值
返回一個(gè)SharedPreferences.Editor的新實(shí)例,允許你修改SharedPreferences對(duì)象里的值。
?
public abstract Map<String, ?> getAll ()
取得preferences里面的所有值
返回值
返回一個(gè)map,其中包含一列preferences中的鍵值對(duì)
??????? 異常
??????????? 空指針異常(NullPointerException)
?
public abstract boolean getBoolean (String key, boolean defValue)
從preferences中獲取一個(gè)boolean類型的值。
??? 參數(shù)
key?? ???????? 獲取的preference的名稱
defValue? 當(dāng)此preference不存在時(shí)返回的默認(rèn)值
返回值
如果preference存在,則返回preference的值,否則返回defValue。如果使用此名稱的preference不是一個(gè)boolean類型,則拋出ClassCastException。
??????? 異常
ClassCastException???
?
public abstract float getFloat (String key, float defValue)
從preferences中獲取一個(gè)float類型的值。
??? 參數(shù)
key?? ???????? 獲取的preference的名稱
defValue? 當(dāng)此preference不存在時(shí)返回的默認(rèn)值
返回值
如果preference存在,則返回preference的值,否則返回defValue。如果使用此名稱的preference不是一個(gè)float類型,則拋出ClassCastException。
異常
ClassCastException???
?
public abstract int getInt (String key, int defValue)
從preferences中獲取一個(gè)int類型的值。
??? 參數(shù)
key?? ???????? 獲取的preference的名稱
defValue? 當(dāng)此preference不存在時(shí)返回的默認(rèn)值
返回值
如果preference存在,則返回preference的值,否則返回defValue。如果使用此名稱的preference不是一個(gè)int類型,則拋出ClassCastException。
異常
ClassCastException???
?
public abstract long getLong (String key, long defValue)
從preferences中獲取一個(gè)long類型的值。
??? 參數(shù)
key?? ???????? 獲取的preference的名稱
defValue? 當(dāng)此preference不存在時(shí)返回的默認(rèn)值
返回值
如果preference存在,則返回preference的值,否則返回defValue。如果使用此名稱的preference不是一個(gè)long類型,則拋出ClassCastException。
異常
ClassCastException???
?
public abstract String getString (String key, String defValue)
從preferences中獲取一個(gè)String類型的值。
??? 參數(shù)
key?? ???????? 獲取的preference的名稱
defValue? 當(dāng)此preference不存在時(shí)返回的默認(rèn)值
返回值
如果preference存在,則返回preference的值,否則返回defValue。如果使用此名稱的preference不是一個(gè)String類型,則拋出ClassCastException。
異常
ClassCastException???
?
public abstract void registerOnSharedPreferenceChangeListener (SharedPreferences.OnSharedPreferenceChangeListener listener)
注冊(cè)一個(gè)回調(diào)函數(shù),當(dāng)一個(gè)preference發(fā)生變化時(shí)調(diào)用。
參數(shù)
listener??? 將會(huì)被調(diào)用的回調(diào)函數(shù)
??????? 參見
??? unregisterOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListener)
?
public abstract void unregisterOnSharedPreferenceChangeListener (SharedPreferences.OnSharedPreferenceChangeListener listener)
注銷一個(gè)之前(注冊(cè))的回調(diào)函數(shù)
參數(shù)
listener??? 要被注銷的回調(diào)函數(shù)
參見
??? registerOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListener)
?
補(bǔ)充
??? 文章精選
??????? SharedPreferences
?????????????????? [Android開發(fā)者指南] 第十八講:Android SharedPreferences和File
?????????????????? SharedPreferences用法
?????????????????? Android程式設(shè)計(jì) (十五) 使用SharedPreferences
??????????????????
??? 示例代碼
??????? 譯注:Shared Preferences保存位置:/data/data/app_name/shared_prefs
public class DemoActivity extends Activity {
???
??? public static String
SOCKET_ADDRESS = "your.local.socket.address";
???
??? // background threads use this Handler
to post messages to
??? // the main application thread
??? private final Handler
handler = new Handler();
???
??? public class NotificationRunnable implements Runnable {
??????? private String
message = null;
???????
??????? public void run() {
???????????
if (message != null &&
message.length() > 0) {
???????????????
showNotification(message);
???????????
}
??????? }
???????
???????
??????? public void
setMessage(String message) {
???????????
this.message =
message;
??????? }
??? }
???
??? // post this to the Handler when the
background thread notifies
??? private final NotificationRunnable
notificationRunnable = new NotificationRunnable();
???
??? public void
showNotification(String message) {
??????? Toast.makeText(this,
message, Toast.LENGTH_SHORT).show();
??? }
???
??? class SocketListener extends Thread {
??????? private Handler
handler = null;
??????? private NotificationRunnable
runnable = null;
???????
??????? public SocketListener(Handler
handler, NotificationRunnable
runnable) {
???????????
this.handler =
handler;
???????????
this.runnable =
runnable;
???????????
this.handler.post(this.runnable);
??????? }
???????
???????
??????? private void
showMessage(String message) {
???????????
this.runnable.setMessage(message);
???????????
this.handler.post(this.runnable);
?????? ?}
???????
??????? @Override
??????? public void run() {
???????????
//showMessage("DEMO: SocketListener started!");
???????????
try {
???????????????
LocalServerSocket server = new LocalServerSocket(SOCKET_ADDRESS);
???????????????
while (true) {
?????? ?????????????LocalSocket
receiver = server.accept();
???????????????????
if (receiver != null) {
???????????????????????
InputStream input =
receiver.getInputStream();
???????????????????????
???????????????????????
// simply for java.util.ArrayList
???? ???????????????????int
readed = input.read();
???????????????????????
int size = 0;
???????????????????????
int capacity = 0;
???????????????????????
byte[] bytes = new byte[capacity];
???????????????????????
???????????????????????
// reading
?????????? ?????????????while (readed
!= -1) {
???????????????????????????
// java.util.ArrayList.Add(E e);
???????????????????????????
capacity = (capacity * 3)/2 + 1;
???????????????????????????
//bytes = Arrays.copyOf(bytes, capacity);
???????????????????????????
byte[] copy = new byte[capacity];
???????????????????????????
System.arraycopy(bytes, 0, copy, 0, bytes.length);
???????????????????????????
bytes = copy;
???????????????????????????
bytes[size++] = (byte)readed;
???????????????????????????
?????????????
??????????????//
read next byte
???????????????????????????
readed = input.read();
???????????????????????
}
???????????????????????
???????????????????????
showMessage(new String(bytes, 0, size));
???????????????????
}
???????????????
}
???????????
} catch (IOException e) {
???????????????
Log.e(getClass().getName(), e.getMessage());
???????????
}
??????? }
??? }
???
??? public static void
writeSocket(String message) throws IOException {
??????? LocalSocket
sender = new LocalSocket();
??????? sender.connect(new LocalSocketAddress(SOCKET_ADDRESS));
??????? sender.getOutputStream().write(message.getBytes());
??????? sender.getOutputStream().close();
??? }
???
??? @Override
??? public void
onCreate(Bundle savedInstanceState) {
??????? super.onCreate(savedInstanceState);
??????? setContentView(R.layout.main);
???????
??????? new SocketListener(this.handler, this.notificationRunnable).start();
???????
??????? Button send1
= (Button)findViewById(R.id.send_1_button);
??????? send1.setOnClickListener(new OnClickListener() {
???????????
???????????
@Override
???????????
public void onClick(View v) {
???????????????
try {
???????????????????
writeSocket("hello");
???????????????
} catch (IOException e) {
???????????????????
Log.e(getClass().getName(), e.getMessage());
???????????????
}
???????????
}
???????????
??????? });
??? }
}
????????
?