2012-08-22 26 views
7

Tôi cố gắng để sửa SharedPreferences của một ứng dụng thông qua ứng dụng khác, mã của tôi đi như thế nàyAndroid: Không thể tạo thư mục cho SharedPreferences nộp

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

Tôi nhận được một lỗi

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

nơi me.test là một dự án khác của tôi trong me.test proj Tôi có thể chỉnh sửa và truy xuất SharedPreferences mà không bị đau

Tôi đang thử nghiệm trên Nexus S android 4.0.4 (Samsung), bất kỳ ai có thể giúp tôi

+1

Dự án "me.test" của bạn đã tạo SharedPreferences với 'MODE_WORLD_WRITEABLE'? – WarrenFaith

+0

@ WarrenFaith, cảm ơn nhận xét. Tôi không biết làm thế nào để tạo ra 'MODE_WORLD_WRITEABLE' với, tôi chỉ tạo ra bình thường –

+0

Bạn cũng có thể viết loại ngoại lệ? – teoREtik

Trả lời

1

Chỉ cần sử dụng tên gói khác trong ứng dụng này. Điều đó sẽ tạo ra các sở thích trong một thư mục khác nhau.

0

Nếu ứng dụng đầu tiên của bạn muốn tạo một SharedPreference mà ứng dụng khác có thể đọc, hãy đảm bảo bạn tạo SharedPreference với chế độ chính xác. Hãy xem getSharedPreferences() hoặc lớp PreferenceManager để biết thêm chi tiết.

1

Nhân tiện, (nó không liên quan đến câu hỏi, nhưng theo bất kỳ cách nào), bạn sử dụng sai phương thức createPackageContext(). Bạn vượt qua đó MODE_WORLD_WRITEABLE cờ có giá trị là và bằng với CONTEXT_IGNORE_SECURITY cờ, vì vậy điều này sẽ được giải thích sai bởi logic, IMHO.

+0

Tôi không biết nhiều về IMHO.Điều cơ bản của tôi là chỉnh sửa các sở thích được chia sẻ của một ứng dụng từ một ứng dụng khác –

+0

Vì vậy, bạn nên tạo 'SharedPreferences' trong ứng dụng sở hữu nó với' getSharedPreferences (String name, int mode) 'bằng cách sử dụng chế độ' MODE_WORLD_WRITEABLE' như @WarrenFaith nói. – teoREtik

+0

MODE_WORLD_WRITEABLE hiện không được chấp nhận –

4

Bạn cần phải thêm các điều khoản trong AndroidManifest.xml của bạn:

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

Tôi có cùng một vấn đề với bạn, và tôi giải quyết nó với các giải pháp trên.

+0

bạn có chắc chắn, thêm quyền truy cập vào các prefs được chia sẻ không? –

0

Sự cố - "Android: Không thể tạo thư mục cho tệp SharedPreferences" sẽ đến khi bạn đã tạo tùy chọn chia sẻ mặc định trong dự án. Vì vậy, một tùy chọn được chia sẻ tồn tại và một lần nữa, bạn đang thêm cùng một tùy chọn mặc định tên. Giải pháp - Chỉ tạo một tùy chọn được chia sẻ mặc định trong ứng dụng. Nếu bạn muốn tạo thêm tùy chọn được chia sẻ thì hãy tạo tùy chọn được chia sẻ với một số tên.

Lưu ý - Chỉ một tùy chọn được chia sẻ mặc định trong một ứng dụng.

0

Khởi động lại thiết bị Samsung của bạn để giải quyết vấn đề này.

Các vấn đề liên quan