簡體   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