gpt4 book ai didi

android - 如何从 Android 中的 'independent' 方法引用 SQLite 数据库

转载 作者:行者123 更新时间:2023-11-29 18:22:20 25 4
gpt4 key购买 nike

我有访问 SQLite 表的代码,该表在我的“主要” Activity 中完美运行。我试图通过创建一个单独的类来处理数据插入、删除等操作来使代码更优雅。

当我将完全相同的代码从主 Activity 移动到单独的类时,出现以下错误:

The method openOrCreateDatabase(String, int, null) is undefined for the type BarCode

我注意到通过使用“Activity”扩展我的数据库类,错误消失了。但是,现在我在运行代码时遇到了 NullPointerException

抽象数据库代码并仍然能够从 Android 中的 Activity 引用它的正确方法是什么?

如果我的行话有误,请原谅,因为我是 Android 和 Java 的新手。

完整代码如下:

package com.example.stockcontrol;

import java.util.Locale;

import android.app.Activity;
import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;

public class BarCode extends Activity {

public BarCode() {

}

public void insertBarCode(String upc) {

SQLiteDatabase db;
db = openOrCreateDatabase(
"StockControl.db"
, SQLiteDatabase.CREATE_IF_NECESSARY
, null
);
db.setVersion(1);
db.setLocale(Locale.getDefault());
db.setLockingEnabled(true);

ContentValues mUpc = new ContentValues();
mUpc.put("upc", "444");
mUpc.put("description", "Box o toast");
mUpc.put("scan_count", "1");
db.insertOrThrow("tbl_upc", null, mUpc);

}

}

最佳答案

与其让您的数据库类扩展 Activity,不如将相关的 Context 传递给该类。您可以在构造函数中传递它,并将对 Context 的引用作为类变量保留。

public class BarCode {
private final Context mContext;

public BarCode(Context context) {
mContext = context;
}

public void insertBarCode(String upc) {

SQLiteDatabase db;
db = mContext.openOrCreateDatabase(
"StockControl.db"
, SQLiteDatabase.CREATE_IF_NECESSARY
, null
);
db.setVersion(1);
db.setLocale(Locale.getDefault());
db.setLockingEnabled(true);

ContentValues mUpc = new ContentValues();
mUpc.put("upc", "444");
mUpc.put("description", "Box o toast");
mUpc.put("scan_count", "1");
db.insertOrThrow("tbl_upc", null, mUpc);

}
}

要使用该类,您可以在 Activity 中执行此操作:

BarCode barCode = new BarCode(this);
barCode.insertBarCode("123456");

关于android - 如何从 Android 中的 'independent' 方法引用 SQLite 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4740132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com