【问题标题】:How to instantiate an object of an Activity Class from non-Activity Class?如何从非活动类实例化活动类的对象?
【发布时间】:2014-06-19 09:56:45
【问题描述】:

我正在创建一个不扩展 Activity 的 java 类,并且在其构造函数中,我想从另一个实例化 SQLiteOpenHelper 的类实例化一个对象。问题是,当实例化SQLiteOpenHelperclass 的对象时,我需要传递当前类的Context,它不扩展Activity。我应该将什么参数传递给SQLiteOpenHelper 的实例。

SQLiteOpenHelper 的构造函数:

public class MPLDataBase extends SQLiteOpenHelper {

private static final int DATABASE_VERSION = 2;
private static final String DATABASE_NAME = "MPL.db";
private static final String MPL_TABLE_NAME = "MPLData";

public MPLDataBase(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);

}

实例化 SQLiteOpenHelper 的类:这是一个 NON_ACTIVITY 类

public class NotifyArrayAdapter {

private MPLDataBase mplOpenHelperDB = null;
private SQLiteDatabase sqliteDB = null;
private int itemClickedPos;

public NotifyArrayAdapter() {
    mplOpenHelperDB = new MPLDataBase(WHAT_SHOULD_I_PASS_HERE);
}

NotifyArrayAdapterClass

public class NotifyArrayAdapter {

private MPLDataBase mplOpenHelperDB = null;
private SQLiteDatabase sqliteDB = null;
private int itemClickedPos;

public NotifyArrayAdapter(Context context) {
    if (this.mplOpenHelperDB == null) {
        this.mplOpenHelperDB = new MPLDataBase(context);
    }
    if (this.sqliteDB == null) {
        this.sqliteDB = mplOpenHelperDB.getWritableDatabase();
    }

}
public void deleteAtPos(int pos) {
    if(! this.sqliteDB.isOpen()) {
        this.sqliteDB = mplOpenHelperDB.getWritableDatabase();
    }
    this.itemClickedPos = pos;
    int [] dbIDs = this.mplOpenHelperDB.getIDs();
    mplOpenHelperDB.deleteRow(dbIDs[this.itemClickedPos]);
}

public void deleteAllDBRows() {
    if(! this.sqliteDB.isOpen()) {
        this.sqliteDB = mplOpenHelperDB.getWritableDatabase();
    }
    mplOpenHelperDB.deleteALLRows();
}

}

【问题讨论】:

  • 你会在任何Activity中调用这个类吗?
  • 你在哪里使用你的NotifyArrayAdapterContexts 并非特定于类。你可以把它们传下去。就像您在初始化对话框、系统服务时所做的那样......
  • @SuperSuer 是的 NotifyArrayAdapter 类我正在创建它,所以稍后我将从另一个扩展活动的类中实例化它
  • @MiroMarkarian 希望我对 super_suer 的回复能回答您的问题
  • 你能把代码粘贴到你调用这个类的地方吗

标签: java android sqlite android-sqlite


【解决方案1】:

您需要将当前的context 传递给您的MPLDataBase 构造函数

 public NotifyArrayAdapter(Context con) {
  mplOpenHelperDB = new MPLDataBase(con);
 }

如果你从任何Activity 打电话,那么

 NotifyArrayAdapter notifyarrayAdapter = new NotifyArrayAdapter(yourActivity.This);

如果你从任何Fargment 打电话,那么

 NotifyArrayAdapter notifyarrayAdapter = new NotifyArrayAdapter(getActivity());

【讨论】:

    猜你喜欢
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多