Can';t在Android中写入SQLite数据库

Can';t在Android中写入SQLite数据库,android,database,sqlite,Android,Database,Sqlite,在我的应用程序中,我有一个SQLite数据库来存储信息。启动主活动时,我初始化数据库。这是数据库的onCreate代码: @Override public void onCreate(SQLiteDatabase db) { String query = "CREATE TABLE " + TABLE_OWES + "(" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLU

在我的应用程序中,我有一个SQLite数据库来存储信息。启动主活动时,我初始化数据库。这是数据库的onCreate代码:

@Override
public void onCreate(SQLiteDatabase db) {
    String query = "CREATE TABLE " + TABLE_OWES + "(" +
            COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
            COLUMN_DESC + " TEXT, " +
            COLUMN_VALUE + " INTEGER" + ");";
    db.execSQL(query);
}
我有一个按钮和两个editText字段将信息发送到数据库并添加它。按下按钮时触发的活动中的代码:

 public void addAnOwe(View v){
    EditText description = (EditText) findViewById(R.id.descriptionAdd);
    EditText value = (EditText) findViewById(R.id.valueAdd);
    Owe newOwe = new Owe(description.getText().toString(), Integer.parseInt(value.getText().toString()));
    DB.addOwe(newOwe);
    Log.i(TAG, "Attempting to add Owe");

    updateLists();
}
public void updateLists(){
    descriptionList = DB.DBtoArray("desc");
    valueList = DB.DBtoArray("value");
    oweAdapter.updateValues(valueList);
    oweAdapter.updateDescriptions(descriptionList);
    updateTotalViewText();
}
DBManager中的代码:

public void addOwe(Owe owe){
    ContentValues values = new ContentValues();

    String description = owe.get_desc();
    String value = String.valueOf(owe.get_value());

    values.put(COLUMN_DESC, description);
    values.put(COLUMN_VALUE, value);

    Log.i(TAG, "Attempting to add: " + description + " - " + value);
    SQLiteDatabase db = getWritableDatabase();
    db.insert(TABLE_OWES, null, values);
    db.close();
}
此时,所有日志消息都显示DBManager正在正确接收描述和值。但是,我使用两种方法从数据库中读取信息。第一个,我写道:

public String[] DBtoArray(String column){
    SQLiteDatabase db = getWritableDatabase();
    Cursor c = db.rawQuery("SELECT * FROM " + TABLE_OWES + " WHERE 1", null);
    String[] array = new String[c.getCount()];
    int i = 0;
    while(c.moveToNext()){
        array[i] = c.getString(c.getColumnIndex(column));
        i++;
    }
    Log.i(TAG, "String of db is " + databaseToString());
    Log.i(TAG, "Array Log is " + Arrays.toString(array));
    return array;
} 
第二个在方法databaseToString()中调用,我从别处复制了该方法,以防我的方法编写错误

 public String databaseToString(){
    String dbString = "";
    SQLiteDatabase db = getWritableDatabase();
    String query = "SELECT * FROM " + TABLE_OWES + " WHERE 1";

    //Cursor points to a location in your results
    Cursor c = db.rawQuery(query, null);
    //Move to the first row in your results
    c.moveToFirst();

    //Position after the last row means the end of the results
    while (!c.isAfterLast()) {
        if (c.getString(c.getColumnIndex(COLUMN_DESC)) != null) {
            dbString += c.getString(c.getColumnIndex(COLUMN_DESC));
        }
        c.moveToNext();
    }
    db.close();
    return dbString;
}

DBtoArray中的记录器都显示数据库为空。这些方法一个接一个地被调用,如addAnOwe()方法所示。为什么不保存数据?

为什么不在DBHelper类中简单地传递DB.addOwe(字符串描述,整数x)和accept!?您正在存储一个字符串和一个整数,但希望将它们放入另一个对象中,您打算在DBHelper中检索该对象,以使用另一种方法返回对象中的参数值。我相信传递值可以直接降低很多复杂性和运行时间。:)

是否在数据库类中扩展SQLiteOpenHelper?从我最初看到的情况来看,一切都很好。是的,我正在扩展所有必需的类,代码中没有错误。谢谢你的想法。我肯定会实现它,但不幸的是,除非我能想出如何写入数据库,否则这并不重要。