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

时间:2016-06-29 20:28:10

标签: java android sqlite android-cardview

这是我的类,我想从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;作为背景

如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

这是因为this必须引用Context类或其子级的对象。 ActivityContext的子类,而您的其他类则不是。要解决此问题,您可以在创建适配器对象时将其传递给适配器对象:

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,如果您从片段中调用它)。