2016-06-23 10 views
1

私のアプリでは、情報を格納するSQLiteデータベースがあります。私の主な活動を開始するとき、私はデータベースを初期化します。これはデータベースのonCreateコードです:AndroidのSQLiteデータベースに書き込めません

@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); 
} 

私はボタンと2つの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の中にコード:ボタン押下でトリガ活性のコードのログメッセージの全てが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(); 
} 

は、説明の両方を受信して​​います値を正しく入力してください。しかし、私はデータベースから情報を読み取るために私が使用する2つの方法があります。二つ目は、私は他の場所の場合には、私の方法が間違って書かれていたからコピー方法databaseToString()、で呼び出され

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; 
} 

:最初のものは、私は自分自身を書きました。

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()メソッドで見られるように、メソッドは順番に呼び出されています。データが保存されないのはなぜですか?

+1

データベースクラスでSQLiteOpenHelperを拡張していますか?私が最初に見ることができるものはすべてよく見えます。 – user3331142

+0

はい、私はすべての必要なクラスを拡張しているので、コードにエラーはありません。 – Saamoz

答えて

1

単純にDB.addOwe(String description、Integer x)を渡してDBHelperクラスで受け入れるのはなぜですか?文字列と整数を格納していますが、別のメソッドを使用してオブジェクト内のパラメータの値を取得するには、DBHelperで取得する別のオブジェクトにそれらを入れたいとします。私は値を直接渡すと信じています。多くの複雑さと実行時間を削減します。 :)

+0

アイデアをありがとう。私は間違いなくそれを実装するつもりですが、データベースに書き込む方法を理解できなければ、残念ながら問題にはなりません。 – Saamoz