【问题标题】:Android: how to get list of all preference xml's for my app and read them?Android:如何获取我的应用程序的所有偏好 xml 列表并阅读它们?
【发布时间】:2013-01-12 20:34:01
【问题描述】:

如何获取应用程序的所有应用程序首选项列表,

1.我正在以这种方式保存共享偏好

2. 我知道他们在data/data/app_packagename/shared_prefs


3.问题: 但是如何在微调器中获取所有偏好 xml 文件的列表

并阅读每个首选项,我在 SO 中进行了搜索,但我没有找到任何帮助,如何读取我的应用程序目录中的所有首选项 xml 文件并访问首选项?

P.S:我知道SharedPreference.getAll();,一旦我得到文件就足够阅读了吗?

我用bits(Rough Code)写过,运行时报错,这里是实现的方法

void getList()
{
  //will be invoked from onCreate to populate spinner,yes spinner is already binded
   PackageManager m = getPackageManager();
        String s = getPackageName();
        try {
            PackageInfo p = m.getPackageInfo(s, 0);
            s = p.applicationInfo.dataDir;
        } catch (NameNotFoundException e) {
            Log.w("yourtag", "Error Package name not found ", e);
        }
        Log.i("dir", s=s+"/shared_prefs");
     //is this write way, how to proceed from here
}

【问题讨论】:

    标签: android sharedpreferences android-preferences readfile android-file


    【解决方案1】:
    public class Preferences extends PreferenceActivity {
    
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            // load the XML preferences file
            addPreferencesFromResource(R.xml.preferences);
        }
    }
    

    然后在你的主类中,你可以参考偏好

    public class DrinkingBuddy extends Activity 
                               implements OnSharedPreferenceChangeListener {
    
        private int weight;
    
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    
            // register preference change listener
            prefs.registerOnSharedPreferenceChangeListener(this);
    
            // and set remembered preferences
            weight = Integer.parseInt((prefs.getString("weightPref", "120");
            // etc
        }
    
        // handle updates to preferences
        public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
            if (key.equals("weightValues")) {
                weight = Integer.parseInt((prefs.getString("weightPref", "120");
            }
            // etc
        }
    }
    

    为您处理首选项更新的保存。

    (不太确定公共/私人声明!)。

    【讨论】:

    • 绝不回答我的问题
    【解决方案2】:

    试试这个

        File prefsdir = new File(getApplicationInfo().dataDir,"shared_prefs");
    
        if(prefsdir.exists() && prefsdir.isDirectory()){
            String[] list = prefsdir.list();
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, android.R.id.text1,list);
            Spinner sp = (Spinner) findViewById(R.id.spinner1);
            sp.setAdapter(adapter);
    
        }
    

    //获取选中项

    String item = (String) sp.getSelectedItem();
        //remove .xml from the file name
        String preffile = item.substring(0, item.length()-4);
    
        SharedPreferences sp2 = getSharedPreferences(preffile, MODE_PRIVATE);
        Map<String, ?> map = sp2.getAll();          
    
        for (Entry<String, ?> entry : map.entrySet()){
            System.out.println("key is "+ entry.getKey() + " and value is " + entry.getValue());
        }
    

    【讨论】:

    • 是否保证“shared_prefs”始终是包含共享首选项文件的目录名称?
    • @Androrider 不是公共api的一部分,所以不保证以后的版本都一样,但是之前的版本都有这个文件夹
    【解决方案3】:

    如果要使用反射,有一个@hide函数Context#getSharedPrefsFile(String name)

    所以你会打电话

    Context#getSharedPrefsFile(String name).getParentFile() 获取对 shared_prefs 目录的引用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-04
      • 1970-01-01
      相关资源
      最近更新 更多