2011-08-02 31 views
5

Tôi có một lớp ContentProvider và một lớp DatabaseHelper (mở rộng SQLiteOpenHelper). Các ContentProvider instantiates Helper mà cần truy cập vào một bối cảnh vì các nhà xây dựng đòi hỏi nó:Ngữ cảnh truy cập trong ContentProvider

public DBHelper(Context context, AssetFileDescriptor db_asset) { 
    super(context, DB_NAME, null, 1); 

Bạn có biết ít nhất một cách duy nhất để có được bối cảnh từ ContentProvider?

Cảm ơn :)

Trả lời

15

Trong phương pháp ContentProvider.onCreate của bạn, bạn có thể vượt qua là kết quả của getContext() để các DBHelper

@Override 
    public boolean onCreate() { 
     dbHelper = new DBHelper(getContext(), db_asset); 
     return true; 
    } 
+0

cảm ơn, tôi đã tập trung vào việc vượt qua "điều này" như thường lệ với các nhà xây dựng, không có ý tưởng để thử một cái gì đó tầm thường :) – Julian

+0

"tập trung vào việc này" - bạn nên vượt qua bối cảnh ứng dụng thay vì bối cảnh hoạt động để ngăn chặn bộ nhớ rò rỉ, xem [bài đăng này] (http://android-developers.blogspot.cz/2009/01/avoiding-memory-leaks.html). – shmoula

+0

Vâng, Julian, nó không phải là lỗi của bạn nếu không có nhiều nhất quán trong "điều này", "getActivity()", "getContext()", vv sử dụng. – ULazdins

1

Hãy thử điều này bạn tôi:

SampleClass sample = new SampleClass(this.getContext()); 

đâu this tham khảo các lớp mở rộng ContentProvider ... Và .getContext() sẽ nhận được bối cảnh của lớp mà mở rộng ContentProvider ..

Hy vọng điều này sẽ giúp ..

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