可能重複:
Can I get the key from SharedPreferences if a know the associated value?如果我知道它與之配對的值,是否可以從SharedPreferences文件獲取「key」值?
下面我用它來從SharedPreferences文件填充一個AlertDialog和值按字母順序排序它的代碼。
當用戶點擊在AlertDialog選項列表,它啓動
setServer(prefsCharSequence[i]);
prefsCharSequence [I]返回所選擇的選項的值。
我想爲該值使用「鍵」。如何獲得我目前的代碼?現在我知道我希望它是一個簡單的「prefsCharSequence [i] .getKey()」或類似的東西。
public void openServerDialog() {
final SharedPreferences myPrefs = this.getSharedPreferences("FileName", MODE_PRIVATE);
TreeMap<String, ?> keys = new TreeMap<String, Object>(myPrefs.getAll());
for (Map.Entry<String, ?> entry : keys.entrySet()) {
Log.i("map values", entry.getKey());
//some code
}
List<Pair<Object, String>> sortedByValue = new LinkedList<Pair<Object,String>>();
for (Map.Entry<String, ?> entry : keys.entrySet()) {
Pair<Object, String> e = new Pair<Object, String>(entry.getValue(), entry.getKey());
sortedByValue.add(e);
}
// Pair doesn't have a comparator, so you're going to need to write one.
Collections.sort(sortedByValue, new Comparator<Pair<Object, String>>() {
public int compare(Pair<Object, String> lhs, Pair<Object, String> rhs) {
String sls = String.valueOf(lhs.first);
String srs = String.valueOf(rhs.first);
int res = sls.compareTo(srs);
// Sort on value first, key second
return res == 0 ? lhs.second.compareTo(rhs.second) : res;
}
});
for (Pair<Object, String> pair : sortedByValue) {
Log.i("map values", pair.first + "/" + pair.second);
}
Collection<?> stringArrayList = keys.values();
final CharSequence[] prefsCharSequence = stringArrayList.toArray(new CharSequence[stringArrayList.size()]);
new AlertDialog.Builder(this)
.setTitle(R.string.server_title)
.setItems(prefsCharSequence,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialoginterface, int i) {
setServer(prefsCharSequence[i]);
}
})
.show();
}
我試圖遍歷和搶我的價值的關鍵,到目前爲止,我有這個,但不知道下一步去哪裏:
CharSequence server = i;
SharedPreferences myPrefs = this.getSharedPreferences("FileName", MODE_PRIVATE);
Map<String, ?> items = myPrefs.getAll();
for(String s : items.keySet()){
}
我等於值對於我想要的鑰匙,這個方向是否正確?
我真的不明白這個問題。您可以迭代首選項的映射,並在值匹配時返回鍵。這個問題還有什麼比這個更重要嗎? – Tim
嗨@Tim,我是Android新手,不理解你的「迭代」評論。你是對的,這是我想要做的,但不知道如何適合我的代碼從哪裏開始 –