[英]getInstance(this) not working on a class without activity
這是我的課程,我想從DatabaseAccess類調用方法:
public class CardAdapter extends RecyclerView.Adapter<CardAdapter.ViewHolder> {
List<Person> mItems;
public Context context;
private static SQLiteDatabase database;
private SQLiteOpenHelper openHelper;
public CardAdapter() {
super();
DatabaseAccess databaseAccess = DatabaseAccess.getInstance(this);
databaseAccess.open();
List<String> kandidatet = DatabaseAccess.getKandidatet();
database.close();
Person p;
mItems = new ArrayList<>();
for (int i = 0; i < kandidatet.size(); i++) {
p = new Person();
p.setName(kandidatet.get(i));
mItems.add(p);
}
.....
....
...
}
錯誤在此行中:
DatabaseAccess databaseAccess = DatabaseAccess.getInstance(this);
這是類DatabaseAccess中的方法:
private DatabaseAccess(Context context) {
this.openHelper = new DatabaseOpenHelper(context);
}
它不接受“ this”作為上下文
如何解決這個問題?
因為this
必須引用Context
類或其子對象。 Activity
是Context
的子類,而其他類則不是。 要解決此問題,您可以在創建適配器對象時將上下文傳遞給它:
public CardAdapter(Context context) {
...
DatabaseAccess databaseAccess = DatabaseAccess.getInstance(context);
this
指的是你目前所在的班級。你必須調用this
,如果你希望它是一個有效的從活動context
,因為活動實現了Context
接口。
因為您是從不擴展Activity
的類中調用它的,所以肯定會收到錯誤,因為在這種情況下this
不是Context
。 您可以通過在上面聲明的字段context
調用方法來解決此問題:
DatabaseAccess databaseAccess = DatabaseAccess.getInstance(context);
在執行此操作之前,您需要使用適當的上下文初始化此字段,可以通過更改構造函數以接受Context
:
public CardAdapter(Context ctx){
context = ctx;
//the rest of the code.
請注意,如果您從活動中調用構造函數,則現在還需要將其構造函數的調用更改為new CardAdapter(this)
(如果從Fragment中調用,則將其更改為getActivity
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.