如果我知道它与配对的值,是否可以从SharedPreferences文件中获取“key”值?

时间:2012-10-09 19:15:10

标签: android sharedpreferences key-value android-alertdialog

  

可能重复:
  Can I get the key from SharedPreferences if a know the associated value?

下面的代码用于从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()){


        }

我等于我想要的键的值,这个方向是朝着正确的方向吗?

2 个答案:

答案 0 :(得分:0)

如果我理解你的问题,prefsCharSequence是来自SharedPreferences对象的值的数组。如果是这种情况,为什么不保留prefs中的一系列键?值为prefsCharSequence [i],键为prefsCharSequenceKeys [i]。

答案 1 :(得分:0)

正如Tim建议的那样,您可以参考SharedPreferences类的getAll()函数。

这将返回Map<String,?>对象,您可以使用keySet()类的Map函数来获取keySet并迭代使用Java的foreach循环。

希望这有帮助。