2012-08-22 137 views
7

我試圖通過另一個應用程序來編輯一個應用程序的SharedPreferences,我的代碼是這樣安卓:無法創建SharedPreferences目錄文件

try { 
Context plutoContext = getApplicationContext().createPackageContext("me.test",Context.MODE_WORLD_WRITEABLE); 
SharedPreferences plutoPreferences = PreferenceManager.getDefaultSharedPreferences(plutoContext); 
Editor plutoPrefEditor = plutoPreferences.edit(); 
plutoPrefEditor.putString("country", "India"); 
plutoPrefEditor.commit(); 
} 

我得到一個錯誤

E/SharedPreferencesImpl( 304): Couldn't create directory for SharedPreferences file /data/data/me.test/shared_prefs/me.test_preferences.xml

其中me.test是我的另一個項目 in me.test proj我可以編輯和檢索SharedPreferences沒有疼痛

我在Nexus S android 4.0.4(三星)上測試它,任何人都可以幫我

+1

你的「me.test」項目是否已經用'MODE_WORLD_WRITEABLE'創建了SharedPreferences? – WarrenFaith

+0

@ WarrenFaith,謝謝你的評論。我不知道如何創建'MODE_WORLD_WRITEABLE',我只是創建了正常的 –

+0

你能寫出那種異常嗎? – teoREtik

回答

1

只需在這個應用程序中使用不同的軟件包名稱。這將在不同的目錄中創建首選項。

1

順便說一句,(它與問題無關,但任何方式)你錯誤地使用createPackageContext()方法。你通過MODE_WORLD_WRITEABLE標誌,其值爲並等於CONTEXT_IGNORE_SECURITY標誌,所以這會被邏輯,恕我直言解釋錯誤。

+0

我不太瞭解恕我直言。我的基本功能是編輯另一個應用程序的共享首選項 –

+0

因此,您應該在@WarrenFaith說的'MODE_WORLD_WRITEABLE'模式下使用'getSharedPreferences(String name,int mode)'在應用程序中創建'SharedPreferences'。 – teoREtik

+0

MODE_WORLD_WRITEABLE現已棄用 –

4

您需要添加在你的AndroidManifest.xml中的權限:

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

我有同樣的問題與你,我與上述解決方案解決了這個問題。

+0

您確定要添加訪問共享首選項的權限嗎? –

0

問題 - 「Android:無法爲SharedPreferences文件創建目錄」將在您已在項目中創建默認共享首選項時出現。 所以,一個共享首選項是存在的,並且再次使用相同名稱的默認首選項添加。 解決方案 - 在應用程序中只創建一個默認的共享首選項。如果您想創建更多的共享首選項,請使用某個名稱創建共享首選項。

注 - 在一個應用程序中只有一個默認的共享首選項。

0

重新啓動您的三星設備來解決這個問題。