2011-09-20 7 views

Trả lời

38

SharedPreferences liên quan đến ngữ cảnh. Bạn chỉ có thể tham khảo thông qua ngữ cảnh.

Bạn chỉ cần chuyển ngữ cảnh làm tham số cho lớp học của mình. Ví dụ trong hàm tạo.

Trong hoạt động của bạn làm:

MyClass myClass = new MyClass(this); 
+8

Aha! Đó là chính xác những gì tôi đang tìm kiếm. Cảm ơn câu trả lời đơn giản và rõ ràng. Bây giờ tôi có thể truy cập nó bằng cách sử dụng 'context.getSharedPreferences();'. Lỗi –

+0

là MODE_PRIVATE không thể được giải quyết thành biến số – Prasad

+1

Hoạt động của tôi không cho phép 'this' trong hàm tạo lớp khác của tôi (lớp có' SharedPreferences'). – Azurespot

2

Hãy thử sử dụng default preferences với ngữ cảnh Ứng dụng. Một bối cảnh tương tự như môi trường mà một ứng dụng chạy trên Linux hoặc các cửa sổ (ví dụ: các biến môi trường như kiểu cửa sổ PATH hoặc kích cỡ bảng điều khiển). Mỗi Hoạt động và Dịch vụ đều có Ngữ cảnh riêng ví dụ như hướng màn hình, chủ đề và nhãn, v.v. nhưng đối với ứng dụng bạn không muốn bối cảnh Hoạt động, bạn muốn một cái gì đó toàn cầu cho ứng dụng, đây là nơi context.getApplicationContext() hữu ích . Điều này giống nhau trong suốt ứng dụng và sẽ luôn cung cấp cho bạn các tùy chọn mặc định giống nhau.

+0

bạn có thể xây dựng? Tôi đã thử 'SharedPreferences prefs = getDefaultSharedPreferences (this);' nhưng nó không hoạt động. –

+0

Tôi đã mở rộng câu trả lời của mình. –

+0

Sử dụng 'PreferenceManager.getDefaultSharedPreferences (applicationContext);' bất kể bạn ở đâu trong mã nó yêu cầu một ngữ cảnh để sử dụng Preferences. –

39

Giải pháp tôi tìm thấy này là:

1-Trong một lớp MainActivity (tức là luôn luôn đưa ra trước khi nhận được bất kỳ bối cảnh trong dự án) tạo ra một biến tĩnh cho bối cảnh:

public static Context contextOfApplication;

2-trong một phương pháp importante của lớp này (Chẳng hạn như onCreate, các nhà xây dựng, vv) initi Alize biến này sử dụng phương pháp getApplicationContext:

public void onCreate() { 
    contextOfApplication = getApplicationContext(); 
} 

3-Trong cùng lớp Tạo một phương thức "getter" cho biến này (nó cũng phải tĩnh):

public static Context getContextOfApplication(){ 
    return contextOfApplication; 
} 

4-Trong phi lớp hoạt động có được ngữ cảnh bằng cách gọi phương thức được tạo tĩnh:

Context applicationContext = MyActivityClass.getContextOfApplication();

5-Sử dụng PreferenceManager Class để có được sự biến SharedPreferences:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(applicationContext); 

Hy vọng nó giúp.

+4

Đó là giải pháp hữu ích, tôi khuyên bạn nên sử dụng contextOfApplication làm trường riêng tư – FredMaggiowski

+0

Bạn cũng có thể sử dụng applicationContext.getSharedPreferences (pref_name, MODE_PRIVATE); –

0

Trước tiên, hãy khai báo thuộc tính riêng trong lớp học của bạn. Trong trường hợp của tôi, tôi có một lớp BaseAdapter:

private final Context ctx; 
private final Vector<Acto> actos; 

public ActoAdaptador(Context ctx, Vector<Acto> as) { 
    super(); 
    this.ctx = ctx; 
    this.actos = as; 
} 

Sau đó, khi sử dụng SharedPreferences:

ctx.getSharedPreferences("com.joninazio.euskofest.UsingPreferences_preferences", Context.MODE_PRIVATE) 

Bằng cách đó làm việc cho tôi ít nhất :)

1

sử dụng mã này vào một lớp mới.

import android.content.Context; 
import android.content.SharedPreferences; 

/** 
    * Created by Atiar Talukdar on 6/5/2017. 
*/ 

public class TemporaryStorageSharedPreference { 
protected final static int DEFAULT = 0; 
int temp = 0; 

public int readSharedPreference(Context context, String spName,String key){ 
    SharedPreferences sharedPreferences = context.getSharedPreferences(spName, Context.MODE_PRIVATE); 
    return temp = sharedPreferences.getInt(key,DEFAULT); 
} 

public void writeSharedPreference(Context context,String ammount,String spName,String key){ 

    SharedPreferences sharedPreferences = context.getSharedPreferences(spName, Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor = sharedPreferences.edit(); 
    editor.putInt(key, DEFAULT); 
    editor.commit(); 
} 
} 
0

tạo SharedPreferences lớp

/** 
    * @param mContext 
    * @param key 
    * @param value 
    */ 
    public static void savePreferences(Context mContext, String key, String value) { 
     SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext); 
     SharedPreferences.Editor editor = sharedPreferences.edit(); 
     editor.putString(key, value).apply(); 
    } 

    /** 
    * @param context 
    * @param keyValue 
    * @return 
    */ 
    public static String getPreferences(Context context, String keyValue) { 
     SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); 
     return sharedPreferences.getString(keyValue, ""); 
    } 

    /** 
    * @param mContext 
    */ 
    public static void removeAllSharedPreferences(Context mContext) { 
     SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext); 
     SharedPreferences.Editor editor = sharedPreferences.edit(); 
     editor.clear().apply(); 
    }