1

我无法弄清楚是什么锁定了我的数据库。这个应用程序在生产中是全新的,我什至无法执行第一个操作,即向数据库添加用户。我有一个 DatabaseHandler 可以完成所有数据库操作。我的 Activity 正在调用该处理程序中的方法。该方法打开和关闭数据库。目前,唯一面向数据库的其他操作是创建数据库。

数据库处理程序.java

public class DatabaseHandler extends SQLiteOpenHelper{

......


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


        @Override
        public void onCreate(SQLiteDatabase db) {

            Log.w(DATABASE, "Creating database at " + directoryPath + "/"
                    + DATABASE_NAME);
            db.execSQL(USER_TABLE_CREATE);
            db.execSQL(PRODUCTS_TABLE_CREATE);
            db.execSQL(INVOICE_TABLE_CREATE);
            db.execSQL(INVOICE_PROD_TABLE_CREATE);
            db.execSQL(CUSTOMER_TABLE_CREATE);
            db.execSQL(BILLING_TABLE_CREATE);
            db.execSQL(COMPANY_TABLE_CREATE);
            db.execSQL(LOGO_TABLE_CREATE);
            db.execSQL(TERMS_TABLE_CREATE);
            db.execSQL(TEMPLATE_TABLE_CREATE);
            db.execSQL(PREFS_TABLE_CREATE);
            db.execSQL(CURRENCY_TABLE_CREATE);
            Log.d(DATABASE, "onCreate Created ALL Tables");
        }

......

    // WRITE VALUES TO DATABASE
        public void putUserData(String fUSERNAME, String fPASSWORD, String fEMAIL, String fFIRSTNAME, String fLASTNAME) {
            Log.d("DATABASE", "Received the following values to insert into the USER Table: " + fUSERNAME + ", " + fPASSWORD + ", " + fEMAIL + ", " + fFIRSTNAME + ", " + fLASTNAME);
            SQLiteDatabase db = this.getWritableDatabase();
            ContentValues cv = new ContentValues();
            cv.put(KEY_USERNAME, fUSERNAME);
            cv.put(KEY_PASSWORD, fPASSWORD);
            cv.put(KEY_EMAIL, fEMAIL);
            cv.put(KEY_FIRSTNAME, fFIRSTNAME);
            cv.put(KEY_LASTNAME, fLASTNAME);
            db.insert(USER_TABLE, null, cv);
            Log.d(DATABASE, "New User data written to Database " + fUSERNAME);
            db.close();
        }
}

我已插入 Log.d 以查看挂断的位置。它调用 getWritableDatabase 的那一刻,应用程序崩溃。

ActivityUserAccountCreate.java

public class ActivityCreateUserAccount extends Activity {

    static Context mContext;
    public ActivityCreateUserAccount(Context _mContext) {
    mContext = _mContext;
    }

    //Empty Constructor
    public ActivityCreateUserAccount(){

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user_account);

...

DatabaseHandler db = new DatabaseHandler(mContext);
                    db.putUserData(fUSERNAME, fPASSWORD, fEMAIL, fFIRSTNAME, fLASTNAME);

..........
}

我已经删除了无聊的无关代码。我已经包括了上下文和类。我想知道上下文是否是问题所在?否则我在我的其他数据库应用程序中使用这个确切的代码并且没有问题。我想不出这里有什么不同。

4

2 回答 2

2

对于那些关心的人,我已经想通了。问题是 ActivityUserAccountCreate 中的上下文。我把这个从

DatabaseHandler db = new DatabaseHandler(mContext);

DatabaseHandler db = new DatabaseHandler(ActivityCreateUserAccount.this);

然后用 mContext 删除整个 Context 条目。

于 2014-07-10T17:04:59.913 回答
1

确保您的上下文不为空。

更改DatabaseHandler db = new DatabaseHandler(mContext)DatabaseHandler db = new DatabaseHandler(this),否则在 onCreate 中设置 mContext 变量。

于 2014-07-10T17:02:49.837 回答