1

アイテムがデータベースに2回挿入されるという問題があります。2つの挿入ステートメントがありません。

配列の要素が空かどうかを確認しようとしています。

これが私のコードのスニペットです

私の主な活動では

private String[] dateTimeDispStr= new String[2];

onCreateで:

dateTimeDispStr[0]=null;
dateTimeDispStr[1]=null;

同じ活動の他の部分:

//-------------------------------------------update time----------------------------------------//    
public void updatetime()
{
    dateTimeDispStr[0]=new StringBuilder()
    .append(pad(mhour)).append(":")
    .append(pad(mminute)).toString();

    tdv.editRow(this, dateTimeDispStr);
    if(dateTimeDispStr[1]!=null){
        update();
    }

}

//-------------------------------------------update date----------------------------------------//    
private void updateDate() {
    dateTimeDispStr[1]=new StringBuilder()
    // Month is 0 based so add 1
    .append(mMonth + 1).append("/")
    .append(mDay).append("/")
    .append(mYear).append(" ").toString();

    tdv.editRow(this, dateTimeDispStr);
    if(dateTimeDispStr[0]!=null){
        update();
    }

}


SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy HH:MM");

public void update(){
    Calendar cal = Calendar.getInstance();
    cal.set(mYear, mMonth + 1, mDay, mhour, mminute, 0);
    String date = formatter.format(cal.getTime());

    tdi.setDate(date.split(" ")); // split makes an array of ["date", "time"]
    db.addItem(tdi);
    Log.d("Item set in the db", "The item: " + date);
}

これが私のデータベースハンドラーです

// Adding new ToDoItem
public void addItem(ToDoItem item) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_TASK, item.getTDItem()); // item task
        values.put(KEY_DATE, item.getDate()); // item date
        values.put(KEY_PRIORITY, item.getPriority()); // item priority

        // Inserting Row
        db.insert(TABLE_TDL, null, values);
        db.close(); // Closing database connection
    }

tdv.editRowは、テーブルレイアウトを拡張しているUIの行を編集します。nullをチェックする機能をすぐに追加します。基本的に、todoアイテムのタスクがすでにある行を追加しますが、日付と時刻を指定して、それらをその行に追加したいと思います。

両方のメソッドでupdateを呼び出すことは理解していますが、それは、ユーザーが最初にいずれかのボタンをクリックした場合に発生するためです。

4

2 に答える 2

1

すべての代わりに、Calendarインスタンスをフェッチし、日付/時刻変数を入力し、DateFormatを使用してローカライズされた文字列を作成します。

update()これを単独で試してください:

// Create a field variable
SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy hh:mm"); // HH for 24hr

public void update(){
    Calendar cal = Calendar.getInstance();
    cal.set(mYear, mMonth + 1, mDay, mhour, mminute, 0);
    String date = formatter.format(cal.getTime());

    tdi.setDate(date.split(" ")); // split makes an array of ["date", "time"]
    db.addItem(tdi);
    Log.d("Item set in the db", "The item: " + date);
}

(現時点では、動作するコンパイラがないので、小さな欠陥は許してください...)
SimpleDateFormat文字列のカスタマイズについてはこちらをご覧ください。

于 2013-01-13T21:50:55.937 に答える
0

はい、2つの挿入ステートメントはありませんが、addItem()メソッドを2回呼び出しています。

日付と時刻を更新する必要があるとします。時刻を更新するときにコードから..アイテムをDBに挿入するaddItem()メソッドを呼び出すupdate()メソッドを呼び出します。次に、同じアイテムの日付を更新するときに、update()を再度呼び出します。このメソッドは、アイテムをDBにもう一度挿入するaddItem()メソッドを呼び出します。

これがお役に立てば幸いです

于 2013-01-13T21:50:11.607 に答える