[英]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.