2012-02-08 3 views
9

Tôi đã bị mắc kẹt về vấn đề này rất đơn giản cho giờ bây giờ và Ive đã không thể tìm thấy bất kỳ giải pháp phù hợp thông qua google.Tôi làm cách nào để sử dụng sharedPreferences bên ngoài Hoạt động?

Tôi đang cố gắng sử dụng lớp SharedPreferences trong lớp mô hình của ứng dụng của tôi. Cụ thể là tôi muốn có thể lưu hoặc lấy tên người dùng và mã thông báo tương ứng bất cứ khi nào ứng dụng được khởi động (nếu người dùng thiết lập ứng dụng cho đăng nhập tự động).

Có cách nào để tôi sử dụng SharedPreferences cho vấn đề này hoặc tôi bị buộc phải sử dụng FileInput/Output không?

Trả lời

26

Nơi nào bạn nhanh chóng lớp Model của bạn?

Chỉ cần vượt qua một trong hai bối cảnh hoặc SharedPreferences để các nhà xây dựng:

public class Model { 
    private final Context context; 
    private final SharedPreferences sharedPrefs; 

    public Model(Context context) { 
     this.context = context; 
     sharedPrefs = context.getSharedPreferences("name", 0); 
    } 

    private String doSomething(){ 
     return sharedPrefs.getString("key", "defValue"); 
    } 
} 
+0

Được rồi. Nhưng doesnt mà đặt ra một vấn đề nếu tôi muốn truy cập dữ liệu này từ nhiều hơn một hoạt động? – CodePrimate

+0

Nếu bạn truy cập dữ liệu từ nhiều hoạt động, bạn sẽ sử dụng một hàm tạo mới có nghĩa là gì? Nếu bạn muốn cùng một SharedPreferences trên hoạt động nó chỉ phụ thuộc vào 'tên'. – Blundell

+0

Cảm ơn bạn. Điều này đã trở thành chìa khóa trong việc giải quyết vấn đề của tôi. – CodePrimate

4

SharedPreferences không được gọi chỉ từ Activity, nhưng từ Context (trong đó Activity kéo dài) để bạn cũng có thể sử dụng ngữ cảnh ứng dụng.

+0

Tôi cũng developerd thư viện tiêm nhỏ, cho phép sử dụng dễ dàng hơn fo ưu đãi: https://github.com/ko5tik/andject Bạn có thể chỉ tiêm/đẩy các sở thích vào các thuộc tính bean. –

0

Bạn có thể sử dụng SharedPrederences từ bất kỳ mã nào có chứa Ngữ cảnh. Từ các tài liệu Hoạt động tại http://developer.android.com/reference/android/app/Activity.html:

Hoạt động tình trạng dai dẳng được quản lý với getPreferences phương pháp (int), cho phép bạn để lấy và sửa đổi một tập hợp các cặp tên/giá trị gắn liền với hoạt động này. Để sử dụng các tùy chọn được chia sẻ trên nhiều thành phần ứng dụng (hoạt động, người nhận, dịch vụ, nhà cung cấp), bạn có thể sử dụng phương thức Context.getSharedPreferences() cơ bản để truy xuất đối tượng tùy chọn được lưu trữ dưới tên cụ thể. (Lưu ý rằng nó là không thể chia sẻ dữ liệu cài đặt trên các gói ứng dụng -. Cho rằng bạn sẽ cần một nhà cung cấp nội dung)