0

Android アプリで、日付に基づいてデータベースから文字列を取得しようとしています。しかし、私は日付に年を入れたくありません (そうすれば、365 行しか必要ありません)。私がそれを機能させる唯一の方法は、DB で、Date 列の日付を yyyyMMdd の形式にすることです。Date 列のすべての日付を MMdd 形式に変更すると、2 桁の月 (10 月、11 月、12 月など) は機能しますが、1 月や 9 月 (01、09) などの 1 桁の月ではアプリがクラッシュします。エラーでCursorIndexOutOfBoundsException: Index 0 requested, with a size of 0。DB で MM-dd、yyyy-MM-dd の形式を試しましたが、上記のエラーでアプリがクラッシュします。Sqlite データベースで MMdd だけで日付をフォーマットすることはできませんか? 何か案は?

主な活動:

    DBT = new SimpleDateFormat("MMdd", Locale.US);
tMMddStr = DBT.format(new Date(System.currentTimeMillis()));

private void getTH() {

    dba.open();
    tArray = dba.getTHA(tMMddStr);
    dba.close();
    optionB_TV.setText(todayArray[2]);
    hideDayAtv.setText(todayArray[1]);
    hideYearAtv.setText(todayArray[0]);

}

DBアダプタ:

    public String[] getTHA(String tMMddStr) {   
    String[] columns = new String[] { KEY_Y, KEY_MD, KEY_HA };
    Cursor cursor = db.query(DB_TABLE, columns, KEY_DATE + "=" + tMMddStr,
            null, null, null, null);

    if (cursor != null) {
        cursor.moveToFirst();
        String hapT[] = new String[3];
        hapT[0] = cursor.getString(0);
        hapT[1] = cursor.getString(1);
        hapT[2] = cursor.getString(2);
        cursor.close();
        this.db.close();
        return hapT;
    }
    return null;
}
4

1 に答える 1

1
CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0

このエラーは、空のカーソルを読み込もうとしていることを意味します。読み込もうとする前に、カーソルにデータがあるかどうかを確認してください。

if (cursor != null && cursor.moveToFirst()) {

1 桁の月の問題に関しては、これはKEY_DATE列のデータ型に関連している可能性があります。KEY_DATEが任意のタイプの数値の場合、最初の が取り除かれ0ます。に同じことをしてみてくださいtMMddStr
(これで問題が解決しない場合は、テーブルの CREATE ステートメントと、データをデータベースに入れたり引き出したりする方法のいくつかの例を投稿してください。)

于 2012-12-04T23:13:21.740 に答える