Search code examples
androidsharedpreferencesandroid-preferencesreadfileandroid-file

Android: how to get list of all preference xml's for my app and read them?


how to get list of all application preferences for application,

1. I am saving shared preference in this mannerActivity to save key value pair in desired preference xml

2. I know that they are in data/data/app_packagename/shared_prefs Preference Xml's shared_pref folder


3. THE PROBLEM: But how to get list of all preference xml files in a spinner enter image description here

and read each preference, i searched in SO, but i did not found any help regarding this, how to do read all preference xml files in my application directory and access the preferences?

P.S: I am aware of SharedPreference.getAll();, will be enough to read once i get the file?

I have wrote in bits(Rough Code), it give error when tried to run, here is the implemented method

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
}

Solution

  • Try this

        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);
    
        }
    

    //To get the selected item

    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());
        }