【问题标题】:Android context from a non activity class来自非活动类的 Android 上下文
【发布时间】:2012-04-12 20:40:48
【问题描述】:

在我的 SQLite 设置类中,我有一个 DbHelper,它需要一个 Context 作为它的一部分。为了设置上下文,我只是在我的 SQLite 类中使用了一个构造函数,它需要一个上下文作为它的参数的一部分。

但是我刚刚遇到了一个问题。当尝试从不是 Activity 的类中调用我的 SQLite 类时,我不能用作 context classname.this,这让我很烦。

我也尝试这样做来声明一个上下文:

protected Context context;

然后再这样称呼它:

SetSql PlayerObject = new SetSql(This.context);

但这也没有用。

有什么建议吗?

【问题讨论】:

  • 我试过了,我得到一个“范围内没有 Activity 类型的封闭实例”
  • IMO,您应该始终将应用程序,而不是活动,上下文传递给这类事情。

标签: android sqlite android-activity android-context


【解决方案1】:

像这样传递应用程序上下文

SetSql PlayerObject = new SetSql(this.getApplicationContext());

现在应该可以正常工作了。

【讨论】:

  • 我认为它不会起作用,因为我的类不是我提到的 Activity,并且它不是清单文件中的 Setup。我试过了,它说方法 getApplicationContext() 对于 RandPlayers(我的班级)是未定义的。如果需要,如何在清单文件中进行设置?
  • 创建一个静态全局变量static Context appContext; 并在appContext 中分配应用程序上下文。 appContext=getApplicationContext();main activity's onCreate() 方法中。现在在您的非活动课程中访问它。 new SetSql(MainActivity.appContext);
  • 主要活动是指第一个启动的活动吗?那将是我的飞溅活动。是这个意思吗?
  • 是的,您可以在启动活动中创建一个静态全局上下文变量并将 ApplicationContext 存储在该变量中。
  • 非常感谢!你帮了很多忙:D
【解决方案2】:
public class DBHelper extends SQLiteOpenHelper {

private static final String TAG = "DBHelper";
private static final int DB_VERSION = 1;

private Context context;
private String DB_PATH;
private String DB_NAME;
private String TABLE_NAME;
private boolean booCreate;
private String createString;
private SQLiteDatabase myDataBase;

public DBHelper(Context context, String db_name, String table_name,
        boolean booCreate, String createString) {
    super(context, db_name, null, DB_VERSION);
    this.context = context;
    this.DB_NAME = db_name;
    this.DB_PATH = "/data/data/" + FindPackageName() + "/databases/";
    Log.d(TAG, "DBPATH=" + DB_PATH);
    this.TABLE_NAME = table_name;
    this.createString = createString;
    this.booCreate = booCreate;
    Log.d(TAG,"booCreate=" + String.valueOf(this.booCreate));
    try {
        createDataBase();
    } catch (IOException e) {
        throw new Error("Unable to Create Database");
    }
}

在你的活动中

dbHelper = new DBHelper(this, this.getString(R.string.db_name_contact),
            this.getString(R.string.table_name_contacts), true, createString);

观看此视频并从tutorial 的第三部分下载代码

【讨论】:

  • 恐怕这段代码会改变我的应用程序中一些我无法改变的东西。您碰巧知道解决上下文问题的简单方法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 2018-07-08
  • 2014-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多