2012-10-09 40 views
0

可能重複:
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()){ 


     } 

我等於值對於我想要的鑰匙,這個方向是否正確?

+0

我真的不明白這個問題。您可以迭代首選項的映射,並在值匹配時返回鍵。這個問題還有什麼比這個更重要嗎? – Tim

+0

嗨@Tim,我是Android新手,不理解你的「迭代」評論。你是對的,這是我想要做的,但不知道如何適合我的代碼從哪裏開始 –

回答

0

就像蒂姆建議的那樣,你可以參考getAll()功能SharedPreferences類。

這將返回Map<String,?>對象,你可以使用用於獲取密鑰集的keySet()功能Map類和迭代使用foreach循環的Java。

希望這會有所幫助。

+0

的評論感謝您的信息。請檢查我的開幕帖子編輯(在底部),看看我是否在正確的路線? –

0

如果我正確理解你的問題,prefsCharSequence是來自你的SharedPreferences對象的數組的數組。如果是這樣的話,爲什麼不只是保留前綴中的一組鍵呢?該值將是prefsCharSequence [i],並且該關鍵字可能與prefsCharSequenceKeys [i]類似。

+0

請參閱上面關於最初問題 –

相關問題