如何从Android中的“独立”方法引用SQLite数据库

时间:2011-01-19 20:05:56

标签: android sqlite

我有代码来访问一个完全可以从我的“主要”活动中运行的SQLite表。我正在尝试通过创建一个单独的类来处理数据插入,删除等来使代码更加优雅。

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

  

方法   openOrCreateDatabase(String,int,   null)未定义类型   条形码

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

如何正确抽象数据库代码并仍能从Android中的活动引用它?

对不起,因为我是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);

 }

}

3 个答案:

答案 0 :(得分:2)

您应该将相关的Context传递给类,而不是让您的数据库类扩展Activity。您可以在构造函数中传递它,并将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");

答案 1 :(得分:1)

看来,解决这些问题的方法是创建一个数据助手。我遵循了本教程,现在我可以从任何地方引用数据库代码: http://www.screaming-penguin.com/node/7742

编辑: 我发现了一个更好的教程,实际上是谷歌自己的一个很好的教程,它包含了许多做这种事情的最佳实践,包括使用数据适配器来正确抽象数据库访问。这是笔记本教程:http://developer.android.com/resources/tutorials/notepad/index.html

答案 2 :(得分:0)

您可以尝试将DB指针传递给mUpc例程。

mUpc.put(db,"upc","444");

您必须重写mUpc的构造函数才能接受db对象。