0

日付ピッカーと時間ピッカーの値をsqliteデータベースに挿入しようとしています。日付と時刻をオブジェクト変数に格納してから、DBhandlerクラスのメソッドを呼び出して、contentvalueオブジェクトを介してそれらを挿入しました。

ここで失敗しているのは、実際の挿入とデータ型です。

'timeApp'および'dateApp'の次のコードでエラーが発生します。これらの変数をDATEおよびTIME変数としてcreateAppointmentEntry'メソッドに渡します。

エラーメッセージ:

 The method put(String, String) in the type ContentValues is not applicable for the arguments (String, Time)

発生するエラーをメソッドします。

public void createAppointmentEntry(String nameApp, String typeApp, Time timeApp, Date dateApp ,String commentApp, Boolean onOrOff) {



        ContentValues cv = new ContentValues();
        cv.put(KEY_NAMEAPP, nameApp);
        cv.put(KEY_TYPEAPP, typeApp);

                    //ERROR on the following two 'puts'
        cv.put(KEY_TIMEAPP, timeApp);
        cv.put(KEY_DATEAPP, dateApp);

        cv.put(KEY_COMMENTAPP, commentApp);
        cv.put(KEY_ALARM, onOrOff);
        ourDatabase.insert(DATABASE_TABLE, null, cv);

これが私のDB列です:

    public static final String KEY_ROWAPPID = "_appid";
public static final String KEY_NAMEAPP = "app_name";
public static final String KEY_TYPEAPP = "app_type";
public static final String KEY_TIMEAPP = "app_time";
public static final String KEY_DATEAPP = "app_date";
public static final String KEY_COMMENTAPP = "app_comments";
public static final String KEY_ALARM = "app_alarm";

私のonCreateメソッド:

db.execSQL("CREATE TABLE " + DATABASE_TABLEAPP + " (" +
            KEY_ROWAPPID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                KEY_NAMEAPP + " TEXT NOT NULL, " +
                KEY_TYPEAPP + " TEXT NOT NULL, " +
                KEY_TIMEAPP + " TEXT NOT NULL, " +
                KEY_DATEAPP + " TEXT NOT NULL, " +
                KEY_COMMENTAPP + " TEXT NOT NULL, " +
                KEY_ALARM + "BOOLEAN NOT NULL);"

                );

時刻と日付のオブジェクト変数を設定する方法は次のとおりです。

    Date setDate = new Date(dobYear - 1900, dobMonth, dobDate);


Time timeToSet = new Time();
timeToSet.set(0, dobMinute, dobHour);
4

2 に答える 2

1

のコンパイルエラーとAPIから判断すると、プリミティブ型とのみをサポートしてContentValuesいるようです。だから、置き換えてみてください:ContentValuesStringbyte[]

//ERROR on the following two 'puts'
 cv.put(KEY_TIMEAPP, timeApp);
 cv.put(KEY_DATEAPP, dateApp);

と:

 cv.put(KEY_TIMEAPP, timeApp.toString());
 cv.put(KEY_DATEAPP, dateApp.toString());

Timeフォーマッターを使用して、およびDateを標準にフォーマットし、Stringそれを解析して戻すことができます。

于 2013-01-20T16:16:00.423 に答える
0

私は何かを推測し KEY_ALARM + "BOOLEAN NOT NULL);" ますが、createステートメントで空白を見逃したかどうかはわかりません。ドロップして、空白だけで同じように再作成してみてください。

db.execSQL("CREATE TABLE " + DATABASE_TABLEAPP + " (" +
            KEY_ROWAPPID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                KEY_NAMEAPP + " TEXT NOT NULL, " +
                KEY_TYPEAPP + " TEXT NOT NULL, " +
                KEY_TIMEAPP + " TEXT NOT NULL, " +
                KEY_DATEAPP + " TEXT NOT NULL, " +
                KEY_COMMENTAPP + " TEXT NOT NULL, " +
                KEY_ALARM + " BOOLEAN NOT NULL);"

KEY_ALARM + " BOOLEAN NOT NULL);" 昨日同じミスステージを作りました。Helperclassを作成した場合は、DATABASE_VERSIONElse呼び出しを変更するだけdb.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLEAPP); で、たとえばHelperクラスはこれを呼び出します。

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    Log.w(MySQLiteHelper.class.getName(),
            "Upgrading database from version " + oldVersion + " to "
                    + newVersion + ", which will destroy all old data");
    db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLEAPP);
    onCreate(db); //recreate 
}

新しいステートメントを使用してデータベースを自動的に再作成します。

于 2013-01-20T15:41:38.520 に答える