创建SQLdatabase条目时出错

时间:2011-07-19 14:30:01

标签: android

我一直收到此错误

07-19 14:24:50.840: ERROR/AndroidRuntime(1512): java.lang.NullPointerException
07-19 14:24:50.840: ERROR/AndroidRuntime(1512):     at com.fttech.organizeit.TaskHelper.createLunch(TaskHelper.java:76)


07-19 14:24:50.840: ERROR/AndroidRuntime(1512):     at com.fttech.organizeit.TaskDetails.saveState(TaskDetails.java:260)

这是我的createLunch()

}
    public long createTask(String title, String descrip, String type, String taskdatetime){
        ContentValues initialValues = new ContentValues();
        initialValues.put(KEY_TITLE, title);
        initialValues.put(KEY_DESCRIP, descrip);
        initialValues.put(KEY_TYPE, type);
        initialValues.put(KEY_DATE_TIME, taskdatetime);

        return mDb.insert(DATABASE_TABLE, null, initialValues);
    }

它在saveState之前的createLunch中给出了一个错误,所以我很确定错误就在这里。它指出了我的回复声明。我只是不明白问题是什么。

我看到lob.v被保存在这里。但不适用于插入数据库。我认为错误就在这里

Log.v(title, "saved");

    SimpleDateFormat dateTimeFormat = new SimpleDateFormat(DATE_TIME_FORMAT);
    String taskdatetime = dateTimeFormat.format(mCalendar.getTime());
    if(taskId == null){
        long id = helper.createTask(title, descrip, type, taskdatetime);
        Log.v(taskdatetime, "Inserted into databse");
        if(id >0){
            taskId = id;
        }
    }
    else{
        helper.updateTask(taskId, title, descrip, type, taskdatetime);
    }

    finish();


}

}

public void fillData(){
            helper.open();
            Cursor task = helper.fetchAllTask();
            startManagingCursor(task);

            String[] from = new String[]{TaskHelper.KEY_TITLE};
            int[] to = new int[]{R.layout.row};

            SimpleCursorAdapter taskAdapter = new SimpleCursorAdapter(this, R.layout.list, task, from , to);
            setListAdapter(taskAdapter);

        }

2 个答案:

答案 0 :(得分:1)

耀,

从代码中跳出来的唯一东西就是mDB对象。你有没有在课堂上的其他地方宣布它。如果没有,那那就是你的问题。如果是这样,第76行是什么。你能发帖吗。

如果您需要它。这是一段声明Mdb的代码片段:

private static class DatabaseHelper extends SQLiteOpenHelper{
        DatabaseHelper (Context context) {
            super(context, DBConstants.DATABASE_NAME, null, DBConstants.DATABASE_VERSION);
        }
        @Override
        public void onCreate(SQLiteDatabase db)
        {
            //db.execSQL(DBConstants.TABLE_CREATE);
        }
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVerison)
        {
            //db.execSQL(DATABASE_UPGRADE);

        }
    }

//Open the data base.  It will either create or upgrade the database
public DbAdpt open() throws android.database.SQLException {
    mDbHelper = new DatabaseHelper(mCtx);
    mDb = mDbHelper.getWritableDatabase();
    return this;
}

希望这有帮助, 乔治

答案 1 :(得分:1)

你的mDB是否为空?试试这个,看看你的id是否以-1返回

public long createTask(String title, String descrip, String type, String taskdatetime){
    ContentValues initialValues = new ContentValues();
    initialValues.put(KEY_TITLE, title);
    initialValues.put(KEY_DESCRIP, descrip);
    initialValues.put(KEY_TYPE, type);
    initialValues.put(KEY_DATE_TIME, taskdatetime);

    long lResult=-1;
    if(mDB!=null)
    lResult = mDb.insert(DATABASE_TABLE, null, initialValues);
    }

    return lResult;
}

<强>更新

您应该通过调用DatabaseHelper类的getWriteableDatabase方法来打开您的数据库,该方法应该扩展SQLiteOpenHelper。

mDB = myDataBaseHelper.getWritableDatabase()

您应该检查调用createTask

的结果
   if(id >0){
        Log.v(taskdatetime, "Inserted into databse");
        taskId = id;
   }
   else
   {
        Log.v(taskdatetime, "Insert failed");
   }