开发者

Android: Viewing SharedPreferences file?

开发者 https://www.devze.com 2023-03-05 07:41 出处:网络
For debugging purposes I need to access 开发者_开发技巧the shared preferences file of my application. As far as I know I should find this file in /data/... but I can\'t access the /data folder through

For debugging purposes I need to access 开发者_开发技巧the shared preferences file of my application. As far as I know I should find this file in /data/... but I can't access the /data folder through to missing permissions. Is this normal? Any way to still access the file? (except maybe raeding it from inside the application?) The phone is not rooted and I also don't want to root it. Thanks for any hint!


I have ran into this issue in the past (not having root permission on the file system but needing access to the applications data folder). If you don't have a rooted device or a developer device such as the ADP1 then you can try running your application on the emulator and then accessing the files from the "File Explorer" in eclipse or DDMS.

EDIT #1: Try using the getAll function of sharedPreferences and saving that to a file, I will see if I can throw together a sample.

EDIT #2: Example Code, created from random samples around the net, probably not the best way to do it, but I tested it and it does work. It writes a file to the root of your sdcard. Make sure you have

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

set in your manifest

private void saveSharedPreferences()
{
    // create some junk data to populate the shared preferences
    SharedPreferences prefs = getSharedPreferences("MyPrefs", MODE_PRIVATE);
    SharedPreferences.Editor prefEdit = prefs.edit();
    prefEdit.putBoolean("SomeBooleanValue_True", true);
    prefEdit.putInt("SomeIntValue_100", 100);
    prefEdit.putFloat("SomeFloatValue_1.11", 1.11f);
    prefEdit.putString("SomeStringValue_Unicorns", "Unicorns");
    prefEdit.commit();

    // BEGIN EXAMPLE
    File myPath = new File(Environment.getExternalStorageDirectory().toString());
    File myFile = new File(myPath, "MySharedPreferences");

    try
    {
        FileWriter fw = new FileWriter(myFile);
        PrintWriter pw = new PrintWriter(fw);

        Map<String,?> prefsMap = prefs.getAll();

        for(Map.Entry<String,?> entry : prefsMap.entrySet())
        {
            pw.println(entry.getKey() + ": " + entry.getValue().toString());            
        }

        pw.close();
        fw.close();
    }
    catch (Exception e)
    {
        // what a terrible failure...
        Log.wtf(getClass().getName(), e.toString());
    }
}

Sources One Two Three


On an unrooted phone there is unfortunately no good way to access the /data folder. You might try creating the files with MODE_WORLD_READABLE like so:

SharedPreferences myPrefs = this.getSharedPreferences("prefs", MODE_WORLD_READABLE);

and then try using adb pull to fetch the file to the desktop.

adb pull /data/data/<packagename>/shared_prefs/prefs.xml

but your mileage may vary.


You can access and modify SharedPreferences data easily by using stetho. Follow the link provided below to add it to your android project and view data.

http://facebook.github.io/stetho/

0

精彩评论

暂无评论...
验证码 换一张
取 消