2011-05-10 91 views
20

爲了進行調試,我需要訪問我的應用程序的共享首選項文件。據我所知,我應該在/ data /中找到這個文件,但是我無法訪問/ data文件夾中的權限。這是正常的嗎?任何方式仍然可以訪問該文件? (除了可能從應用程序內部提交它?)手機沒有植根,我也不想植根。 感謝您的任何提示!Android:查看SharedPreferences文件?

+0

這裏我的答案可能會有所幫助http://stackoverflow.com/a/40464820/5868421 – 2017-01-19 07:57:43

回答

17

我以前遇到過這個問題(沒有文件系統的root權限,但需要訪問應用程序數據文件夾)。如果您沒有固定設備或開發人員設備(如ADP1),則可以嘗試在模擬器上運行應用程序,然後從eclipse或DDMS中的「文件資源管理器」中訪問文件。

編輯#1: 嘗試使用sharedPreferences的getAll函數並將其保存到文件中,我會看看我是否可以將樣本放在一起。

編輯#2: 示例代碼,從網絡上的隨機樣本創建,可能不是最好的方式來做到這一點,但我測試了它,它確實工作。它將一個文件寫入您的SD卡的根目錄。請確保你有你的清單

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

來源

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

OneTwoThree

+0

不幸的是我的應用程序涉及到wlan和wlan在模擬器上不可用,不是嗎? – 2011-05-10 14:43:23

+0

我不相信模擬器上有wlan,我會再看看 – snctln 2011-05-10 14:48:13

+0

snctln,我有同樣的想法,不o任何工作,我會嘗試它,沒有需要的樣品;-) – 2011-05-10 14:54:50

1

在無根電話上,不幸的是沒有好方法訪問/ data文件夾。你可以嘗試用MODE_WORLD_READABLE像這樣創建的文件:

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

,然後嘗試使用adb pull獲取的文件保存到桌面。

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

,但您的里程可能會有所不同。

+0

HMM我該如何創建文件?我用xml指定了我的偏好,android處理它的存儲......我只需要通過它從代碼中檢索值。感謝您的任何提示和答覆:-) – 2011-05-10 14:42:54

+0

該文件是由Preferences框架自動創建的:如果您需要訪問代碼中的數據,您應該能夠使用首選框架,如http:// developer所述.android.com /指南/主題/數據/ data-storage.html#pref – Femi 2011-05-10 14:49:21

+0

感謝費米,這工作,但不知何故我使用錯誤的關鍵或Android存儲的東西比預期的不同...這就是爲什麼我想看看在所有值/文件本身): 編輯:好吧,有getAll()方法,將有一個看看它。 – 2011-05-10 14:53:24