0

私が書いているもののためにカスタムCursorAdapterを作成しようとしています。私がやっていることの計画には、アラームが鳴る日時でいっぱいのSQLiteデータベースが含まれます。(SQLiteには実際にはDATETIMEデータ型がないため、INTとして格納される前にすべてUnix時間に変換されます。)カスタムカーソルアダプターを作成するこの例を見つけて、それを取り入れられるように適応させようとしました。 Unix Timeエントリを作成し、人間が読める形式に変換します。しかし、私は少し障害にぶつかりました。私が持っているものが私が必要としているものであるかどうかはわかりません。これが私がこれまでに得たものです:

import java.util.GregorianCalendar;

import android.content.Context;
import android.database.Cursor;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Filterable;
import android.widget.TextView;

/**
 * @author Dave Smith
 *
 */
public class DateTimeCursorAdapter extends SimpleCursorAdapter implements Filterable {

    private Context context;
    private int layout;

    /**
     * @param context
     * @param layout
     * @param c
     * @param from
     * @param to
     * @param flags
     */
    public DateTimeCursorAdapter(Context context, int layout, Cursor c,
            String[] from, int[] to, int flags) {
        super(context, layout, c, from, to, flags);
        this.context = context;
        this.layout = layout;
    }
    public View newView(Context context, Cursor cursor, ViewGroup parent){
        Cursor c = getCursor();
        final LayoutInflater inflater = LayoutInflater.from(context);
        View v = inflater.inflate(layout, parent, false);
        /*int nameCol = c.getColumnIndexOrThrow("ALARMS.DATETIME");
        String dateTime = c.getString(nameCol);
        dateTime = convertFromUnixTime(Long.parseLong(dateTime)).toString();
        TextView dateTimeText = (TextView) v.findViewById(R.id.dateandtime);
        if (dateTimeText != null){
            dateTimeText.setText(dateTime);
        }*/
        return v;       
    }
    public void bindView(Context context, Cursor c, View v){
        int nameCol = c.getColumnIndexOrThrow("ALARMS.DATETIME");
        String dateTime = c.getString(nameCol);
        dateTime = convertFromUnixTime(Long.parseLong(dateTime)).toString();
        TextView dateTimeText = (TextView) v.findViewById(R.id.dateandtime);
        if (dateTimeText != null){
            dateTimeText.setText(dateTime);
        }
    }
    private GregorianCalendar convertFromUnixTime(long unixTime)
    {
        GregorianCalendar cal = new GregorianCalendar();
    cal.setTimeInMillis(unixTime);
    return cal;
    }

}

これにより、データベースからさまざまなUnixTimeエントリをすべて読み込んで、MM / DD / YYYY HH:MM形式(または現在のロケールで受け入れられる形式)で出力できるようになりますか?

4

1 に答える 1

1

カスタムアダプタは必要ありません。データベースを機能させます。

ドキュメントから:

"1.2日付と時刻のデータ型

SQLiteには、日付や時刻を保存するためのストレージクラスがありません。代わりに、SQLiteの組み込みの日付と時刻関数は、日付と時刻をTEXT、REAL、またはINTEGER値として格納できます。

ISO8601文字列としてのTEXT( "YYYY-MM-DD HH:MM:SS.SSS")。ユリウス日数としてのREAL、先発グレゴリオ暦による紀元前4714年11月24日のグリニッジでの正午からの日数。UNIX時間としてのINTEGER、1970-01-0100:00:00UTCからの秒数。

アプリケーションは、これらの形式のいずれかで日付と時刻を保存し、組み込みの日付と時刻関数を使用して形式間で自由に変換することを選択できます。「」


適切なSQLite関数を使用して、カーソルに入る前に日付/時刻を変換します。

于 2012-05-26T21:15:16.503 に答える