繁体   English   中英

getInstance(this)在没有活动的类上不起作用

[英]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类或其子对象。 ActivityContext的子类,而其他类则不是。 要解决此问题,您可以在创建适配器对象时将上下文传递给它:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM