2012-07-31 9 views
62

Tôi đang cố gắng đọc SharedPreferences bên trong Phân đoạn. Mã của tôi là những gì tôi sử dụng để nhận được tùy chọn trong bất kỳ Hoạt động nào khác.Chia sẻ trên AndroidĐược đề cập trong Fragment

 SharedPreferences preferences = getSharedPreferences("pref", 0); 

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

Cannot make a static reference to the non-static method getSharedPreferences(String, int) from the type ContextWrapper  

tôi đã cố gắng làm theo những liên kết này nhưng không có may mắn Accessing SharedPreferences through static methodsStatic SharedPreferences. Cảm ơn bạn vì bất kỳ giải pháp nào.

Trả lời

176

Phương thức getSharedPreferences là phương thức của đối tượng Context, vì vậy chỉ cần gọi getSharedPreferences từ Fragment sẽ không hoạt động ... vì đó không phải là ngữ cảnh! (Hoạt động là phần mở rộng của Ngữ cảnh, vì vậy chúng tôi có thể gọi getSharedPreferences từ nó).

Vì vậy, bạn có để có được các ứng dụng của bạn bằng cách Context

// this = your fragment 
SharedPreferences preferences = this.getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE); 
+1

getSharedPreferences ("pref", 0); số không (0) có nghĩa là riêng tư/công khai? – Kailas

+0

@Kailas chính xác, chế độ, tức là WORLD_READABLE ect. http://developer.android.com/reference/android/content/Context.html#getSharedPreferences(java.lang.String, int) – Jug6ernaut

+0

loại chế độ nào tôi đã sử dụng tùy chọn được chia sẻ chỉ truy cập bởi ứng dụng đó không có ứng dụng nào khác đọc/ghi giá trị sở thích được chia sẻ? – Kailas

4

Là một lưu ý thận trọng câu trả lời này được cung cấp bởi người dùng trên tôi là đúng.

SharedPreferences preferences = this.getActivity().getSharedPreferences("pref",0); 

Tuy nhiên, nếu bạn cố gắng lấy bất kỳ thứ gì trong đoạn trước khi onAttach được gọi là getActivity() sẽ trả về giá trị rỗng.

+1

và hoạt động không được khởi tạo đầy đủ cho đến khi onActivityCreated được gọi là ... – hotzen

9

Câu trả lời rõ rệt không làm việc cho tôi, tôi đã phải sử dụng

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); 

EDIT:

Hoặc chỉ cần cố gắng loại bỏ các this:

SharedPreferences prefs = getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE); 
+3

Câu trả lời được đánh dấu không phù hợp với bạn vì bạn đang truy cập các tùy chọn chia sẻ mặc định. Thiết kế tốt hơn là lưu trữ các tùy chọn của bạn không phải là một đối tượng được chia sẻ nhưng trong một không gian riêng và riêng tư, đó là câu hỏi và câu trả lời là gì ở đây. – zeeshan

0

Bạn có thể làm cho SharedPrefences theo phương thức onAttach đoạn như sau:

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
    SharedPreferences preferences = context.getSharedPreferences("pref", 0); 
}