这是我的类,我想从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);
}
它不接受&#34;这个&#34;作为背景
如何解决这个问题?
答案 0 :(得分:2)
这是因为this
必须引用Context
类或其子级的对象。 Activity
是Context
的子类,而您的其他类则不是。要解决此问题,您可以在创建适配器对象时将其传递给适配器对象:
public CardAdapter(Context context) {
...
DatabaseAccess databaseAccess = DatabaseAccess.getInstance(context);
答案 1 :(得分:2)
this
指的是您当前所在的课程。如果您希望该活动成为有效的this
,那么必须从活动中调用context
activity实现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)
,如果您从活动中调用它(或getActivity
,如果您从片段中调用它)。