0

1つの投稿で質問が多すぎると思うので、これを日付と時刻で別々の質問に分割する必要があるかどうかを教えてください。ただし、データベースで日付と時刻を使用すると、完全に困惑します。私はさまざまな方法(文字列、juliandates、unixなど)を調べましたが、それが行われたのは私をさらに混乱させることだけです。コンテキストを提供するために、ユーザーはフォームに入力してレコードを追加します。フォームには2つのボタンがあり、1つは日付ピッカーでフラグメントを開き、もう1つはタイムピッカーでフラグメントを開きます。選択した日時がボタンのテキストとして表示されます。別のボタンは、フォームの詳細をデータベースに保存します。

次に、現時点ですべてのレコードを表示するリストビューアクティビティがありますが、最終的には、特定の日付のレコードのみが表示されるように、日付ピッカーフラグメントへのボタンが必要です。次に、これらのレコードが時間順に一覧表示されます。(次の段落が解決されたら、この段落を自分で理解できると思います。)

リストビューでレコードの1つをクリックすると、元のフォーム(レコードが作成された場所)と同じ外観のアクティビティが開き、そのレコードのすべての情報が入力されます。次に、ユーザーはレコードを削除するか、レコードのフィールドを変更してレコードを保存(更新)するかを選択できます。このフォームには日付と時刻のボタンも含まれている必要があります。これにより、これらも変更できるため、ピッカーはこのアクティビティで以前に保存された日付/時刻に設定する必要があります。

私が助けを必要としているのは、日付と時刻を保存して、後で編集フォームで取得して編集するための最良の方法です。これには、ボタンテキスト(日付のDD / MM / yyyy)として表示する特定の方法にフォーマットすることも含まれます。時間はhh:mm:am / pm)。前に述べたように、これは私を混乱させたので、私はこれを手に持っていただければ幸いです。以下の膨大な量のコーディングについてお詫びしますが、余分なフォームフィールドをすべて削除することで、関連性を維持しようとしました。

FuncAdd.java(データを保存するためのフォーム):

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView (R.layout.dash_add);

    now = Calendar.getInstance();
    add_button_date = (Button) findViewById(R.id.add_button_date);
    add_button_time = (Button) findViewById(R.id.add_button_time);

    add_button_date.setText(String.valueOf(now.get(Calendar.DAY_OF_MONTH))+"/"+
            String.valueOf(now.get(Calendar.MONTH)+1)+"/"+
            String.valueOf(now.get(Calendar.YEAR)));
    strDate = add_button_date.getText().toString();

    add_button_time.setText(String.valueOf(now.get(Calendar.HOUR_OF_DAY))+":"+
            String.valueOf(now.get(Calendar.MINUTE)));
}

public void addDateTime(View v) {
    int id = v.getId();
    switch (id) {
    case R.id.add_button_date :
        showDialogDate();
        break;
    case R.id.add_button_time :
        showDialogTime();
        break;
    default:
        break;
}}

public interface DateDialogFragmentListener {
    public void updateChangedDate(int year, int month, int day);
}

public interface TimeDialogFragmentListener {
    public void updateChangedTime(int hourOfDay, int minute);
}

public void showDialogDate() {
    FragmentTransaction ftDate = getFragmentManager().beginTransaction();
    fragDate = DateDialogFragment.newInstance(this, new DateDialogFragmentListener() {
        public void updateChangedDate(int year, int month, int day) {
            add_button_date.setText(String.valueOf(day)+"/"+String.valueOf(month+1)+"/"+String.valueOf(year));
            now.set(Calendar.YEAR, year);
            now.set(Calendar.MONTH, month);
            now.set(Calendar.DAY_OF_MONTH, day);
        }}, now);
    fragDate.show(ftDate, "DateDialogFragment");
}

public void showDialogTime() {
    FragmentTransaction ftTime = getFragmentManager().beginTransaction();
    fragTime = TimeDialogFragment.newInstance(this, new TimeDialogFragmentListener() {
        public void updateChangedTime(int hourOfDay, int minute) {
            add_button_time.setText(String.valueOf(hourOfDay)+":"+String.valueOf(minute));
            now.set(Calendar.HOUR_OF_DAY, hourOfDay);
            now.set(Calendar.MINUTE, minute);
        }}, now);
    fragTime.show(ftTime, "TimeDialogFragment");
}

public void onClick(View arg0) {

    strDate = add_button_date.getText().toString();
    strTime = add_button_time.getText().toString();

    String Time = strTime;
    String Date = strDate;
AddDBHelper entry = new AddDBHelper(FuncAdd.this);
    entry.open();
    entry.createEntry(Time, Date, Category, CategoryPos, BGL, Carbs, Insulin, InsulinPos, Dose, CorInsulin, CorInsulinPos, CorDose);
    entry.close();              

    goHome (this);
}   

AddDBHelper.java(My DB Helperクラス):

private static class DbHelper extends SQLiteOpenHelper {

    public DbHelper(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
    }


    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + DB_TABLE + " (" +
            KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
            KEY_TIME + " TEXT NOT NULL, " +
            KEY_DATE + " TEXT NOT NULL, " +
            KEY_CATEG + " TEXT NOT NULL);"
);}

public long createEntry(String Time, String Date, String Category) {
    ContentValues cv = new ContentValues();
    cv.put(KEY_TIME, Time);
    cv.put(KEY_DATE, Date);
    cv.put(KEY_CATEG, Category);
    return glucoDB.insert(DB_TABLE, null, cv);
}

public Cursor getEntries() {        
    return glucoDB.query(DB_TABLE, new String[] {
            KEY_ROWID,
            KEY_TIME,
            KEY_DATE,
            KEY_CATEG},
            null, null, null, null, null);
}

public void updateDetails(DBDetails dbdetails) {

    ContentValues cv = new ContentValues();
    cv.put(AddDBHelper.KEY_TIME, UpdateDBDetails.newTime);
    cv.put(AddDBHelper.KEY_DATE, UpdateDBDetails.newDate);
    cv.put(AddDBHelper.KEY_CATEG, dbdetails.getuCateg());

    int count = glucoDB.update(DB_TABLE, cv, KEY_ROWID + "=?", new String[] {String.valueOf(dbdetails.getuRow())});
    Log.v("AddDbHelper", "Row " + dbdetails.getuRow() + " updated? " + count);
}

* TimeDialogFragmentクラス:*

public class TimeDialogFragment extends DialogFragment {

static Context mContext;
static int mHour;
static int mMinute;
static TimeDialogFragmentListener mListener;

public static TimeDialogFragment newInstance(Context context,
        TimeDialogFragmentListener listener, Calendar now) {
    TimeDialogFragment dialog = new TimeDialogFragment();
    mContext = context;
    mListener = listener;

    mHour = now.get(Calendar.HOUR_OF_DAY);
    mMinute = now.get(Calendar.MINUTE);

    Bundle args = new Bundle();
    args.putString("title", "Set Time");
    dialog.setArguments(args);
    return dialog;
}

public Dialog onCreateDialog(Bundle savedInstanceState) {
    return new TimePickerDialog(mContext, mTimeSetListener, mHour, mMinute, false);
}

private TimePickerDialog.OnTimeSetListener mTimeSetListener =
        new TimePickerDialog.OnTimeSetListener() {

    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        mHour = hourOfDay;
        mMinute = minute;
        mListener.updateChangedTime(hourOfDay, minute);
    }
}; }

DateDialogFragmentクラス:

public class DateDialogFragment extends DialogFragment {

static Context mContext;
static int mYear;
static int mMonth;
static int mDay;
static DateDialogFragmentListener mListener;

public static DateDialogFragment newInstance(Context context,
        DateDialogFragmentListener listener, Calendar now) {
    DateDialogFragment dialog = new DateDialogFragment();
    mContext = context;
    mListener = listener;

    mYear = now.get(Calendar.YEAR);
    mMonth = now.get(Calendar.MONTH);
    mDay = now.get(Calendar.DAY_OF_MONTH);

    Bundle args = new Bundle();
    args.putString("title", "Set Date");
    dialog.setArguments(args);
    return dialog;          
}

public Dialog onCreateDialog(Bundle savedInstanceState) {
    return new DatePickerDialog(mContext, mDateSetListener,
            mYear, mMonth, mDay);
}

private DatePickerDialog.OnDateSetListener mDateSetListener = 
        new DatePickerDialog.OnDateSetListener() {

    public void onDateSet(DatePicker view, int year, int monthOfYear,
            int dayOfMonth) {
        mYear = year;
        mMonth = monthOfYear;
        mDay = dayOfMonth;
        mListener.updateChangedDate(year, monthOfYear, dayOfMonth);     
            }
    };} 

DBDetails.java(値を取得/設定するクラス):

public class DBDetails {

private String uRow;
private String uTime;
private String uDate;
private String uCateg;

public String getuRow() {
    return uRow;
}

public void setuRow(String uRow) {
    this.uRow = uRow;
}

public String getuTime() {
    return uTime;
}

public void setuTime(String uTime) {
    this.uTime = uTime;
}

public String getuDate() {
    return uDate;
}

public void setuDate(String uDate) {
    this.uDate = uDate;
}

public String getuCateg() {
    return uCateg;
}

public void setuCateg(String uCateg) {
    this.uCateg = uCateg;
} }

UpdateDBDetails.java(ユーザーがレコードを編集できるクラス):

public class UpdateDBDetails extends DashMenuActivity {

TimeDialogFragment fraguTime;
DateDialogFragment fraguDate;
Button update_button_time, update_button_date;
Calendar now;

ImageButton update_button_save, update_button_delete;   
String strTime, strDate;

private String bundleduRowId;
private String bundleduTime;
private String bundleduDate;
private String bundleduCateg;
public static String getRowId;
public static String newTime, newDate, newCat;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.updatedbdetails);

    now = Calendar.getInstance();
    update_button_date = (Button) findViewById(R.id.update_button_date);
    update_button_time = (Button) findViewById(R.id.update_button_time);

    update_button_date.setText(bundleduDate);
    update_button_time.setText(bundleduTime);

Bundle takeBundledData = getIntent().getExtras();

    bundleduRowId = takeBundledData.getString("clickeduRowId");
    bundleduTime = takeBundledData.getString("clickeduTime");
    bundleduDate = takeBundledData.getString("clickeduDate");
    bundleduCateg = takeBundledData.getString("clickeduCateg");
}
public void clickUpdateDelete(View v) {
    newTime = strTime;
    newDate = strDate;
    newCateg = newCat;

AddDBHelper modifyEntry = new AddDBHelper(this);
    modifyEntry.open();

    DBDetails dbdetails = new DBDetails();

    dbdetails.setuRow(bundleduRowId);

    if (v.getId() == R.id.update_button_delete) {
        modifyEntry.deleteDetails(dbdetails);
    } else if (v.getId() == R.id.update_button_save) {
        dbdetails.setuDate(newDate);
        dbdetails.setuTime(newTime);
        dbdetails.setuCateg(newCateg);
modifyEntry.updateDetails(dbdetails);
    }   
    modifyEntry.close();
    finish();
}

FuncAdd.javaクラスの修正

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView (R.layout.dash_add);

    add_button_date = (Button) findViewById(R.id.add_button_date);
    add_button_time = (Button) findViewById(R.id.add_button_time);

    now = Calendar.getInstance().getTime();

    SimpleDateFormat dFormatter = new SimpleDateFormat("dd MMM yyyy");
    strDate = dFormatter.format(now);
    add_button_date.setText(strDate);

    SimpleDateFormat tFormatter = new SimpleDateFormat("KK:mm a");
    strTime = tFormatter.format(now);
    add_button_time.setText(strTime);
}

public interface DateDialogFragmentListener {
    public void updateChangedDate(int year, int month, int day);
}

public void showDialogDate() {
    FragmentTransaction ftDate = getFragmentManager().beginTransaction();
    fragDate = DateDialogFragment.newInstance(this, new DateDialogFragmentListener() {
        public void updateChangedDate(int year, int month, int day) {
            strDate = (String.valueOf(day)+"/"+String.valueOf(month+1)+"/"+String.valueOf(year));
            SimpleDateFormat dFormatter = new SimpleDateFormat("dd MMM yyyy");
            newstrDate = dFormatter.parse(strDate);
            add_button_date.setText(newstrDate);
        }}, now);
    fragDate.show(ftDate, "DateDialogFragment");
}

UpdateDBDetails.javaの修正

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.updatedbdetails);

Bundle takeBundledData = getIntent().getExtras();

    bundleduRowId = takeBundledData.getString("clickeduRowId");
    bundleduTime = takeBundledData.getString("clickeduTime");
    bundleduDate = takeBundledData.getString("clickeduDate");

SimpleDateFormat dFormatter = new SimpleDateFormat("dd MMM yyyy");
    SimpleDateFormat tFormatter = new SimpleDateFormat("KK:mm a");

    now = Calendar.getInstance();

// no need to catch an exception, as I'm using pickers and the format can never be input incorrectly
    try {
        dDate = dFormatter.parse(bundleduDate);
        String dateArray[] = dDate.toString().split(" ");

        if (dateArray[1].equalsIgnoreCase("Jan")) {
            uMonth = 0;
        } else if (dateArray[1].equalsIgnoreCase("Feb")) {
            uMonth = 1;
        } else if (dateArray[1].equalsIgnoreCase("Mar")) {
            uMonth = 2;
        } else if (dateArray[1].equalsIgnoreCase("Apr")) {
            uMonth = 3;
        } else if (dateArray[1].equalsIgnoreCase("May")) {
            uMonth = 4;
        } else if (dateArray[1].equalsIgnoreCase("Jun")) {
            uMonth = 5;
        } else if (dateArray[1].equalsIgnoreCase("Jul")) {
            uMonth = 6;
        } else if (dateArray[1].equalsIgnoreCase("Aug")) {
            uMonth = 7;
        } else if (dateArray[1].equalsIgnoreCase("Sep")) {
            uMonth = 8;
        } else if (dateArray[1].equalsIgnoreCase("Oct")) {
            uMonth = 9;
        } else if (dateArray[1].equalsIgnoreCase("Nov")) {
            uMonth = 10;
        } else if (dateArray[1].equalsIgnoreCase("Dec")) {
            uMonth = 11;
        } 

        int uYear = Integer.parseInt(dateArray[5]);
        int uDay = Integer.parseInt(dateArray[2]);
        now.set(Calendar.YEAR, uYear);
        now.set(Calendar.MONTH, uMonth);
        now.set(Calendar.DAY_OF_MONTH, uDay);
        CurrentD = now.getTime();
        strDate = dFormatter.format(CurrentD);
        update_button_date.setText(strDate);
    } catch (ParseException e) {
        e.printStackTrace();
    }

    try {
        tDate = tFormatter.parse(bundleduTime);
        String timeArrayFull[] = tDate.toString().split(" ");
        String timeArray[] = timeArrayFull[3].split(":");
        int uHour = Integer.parseInt(timeArray[0]);
        int uMinute = Integer.parseInt(timeArray[1]);
        now.set(Calendar.HOUR_OF_DAY, uHour);
        now.set(Calendar.MINUTE, uMinute);
        CurrentT = now.getTime();
        strTime = tFormatter.format(CurrentT);
        update_button_time.setText(strTime);
    } catch (ParseException e) {
        e.printStackTrace();
    }
\\ The rest of the code does not differ from above, for launching a dialogfragment and saving the results to the DB.
4

2 に答える 2

1

なぜそれがあなたを困惑させたのか私は本当に理解していません。しかし、あなたがリレーショナルデータベースに不慣れであるなら、それは初心者が抱えている理解できる問題だと思います。日付と時刻を保存するための最良の方法は、エクスポートする予定がない場合でも、ほとんどのデータベースで簡単に理解できる形式にすることです。SQLiteのWebサイトを確認してください。これを短くするには、YYYY-MM-DD(日付の場合)およびHH:MM:SS(時間の場合)の形式でデータベースに文字列として格納するだけです。次に、私が提供したリンクで見ることができるSQLiteの甘い組み込み関数を使用できます:)それがお役に立てば幸いです。

編集:

また、アプリが実際に日付と時刻をINTEGER値として格納していることに気付いたので、少し余分に掘り下げました。SQLiteのさまざまなデータ型を確認してください。さらに重要なのは、日付と時刻のデータ型のセクション1.2です。ですから、それらをそのまま保持することTEXTINTEGER問題ありませんが、一貫性を保つだけです。

于 2012-08-04T06:46:06.707 に答える
0

Chintanが提案したフォーマッターを使用し、もう少し読んで、それを理解することができました。Andy、あなたのアドバイスは貴重でしたが、DBの保存、取得、更新を可能にするために、dialogfragmentを使用してデータを設定/取得する方法についてさらに支援を受けました。結局、メインフォームのアクティビティを修正するだけで済みました。

public class FuncAdd extends DashMenuActivity implements OnClickListener {

TimeDialogFragment fragTime;
DateDialogFragment fragDate;
Button add_button_time, add_button_date;
Calendar now;
Date nowDT, newD, newT;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView (R.layout.dash_add);

    add_button_date = (Button) findViewById(R.id.add_button_date);
    add_button_time = (Button) findViewById(R.id.add_button_time);

    now = Calendar.getInstance();
    nowDT = now.getTime();

    SimpleDateFormat dFormatter = new SimpleDateFormat("dd MMM yyyy");
    strDate = dFormatter.format(nowDT);
    add_button_date.setText(strDate);

    SimpleDateFormat tFormatter = new SimpleDateFormat("KK:mm a");
    strTime = tFormatter.format(nowDT);
    add_button_time.setText(strTime);
}

public void addDateTime(View v) {
    int id = v.getId();
    switch (id) {
    case R.id.add_button_date :
        showDialogDate();
        break;
    case R.id.add_button_time :
        showDialogTime();
        break;
    default:
        break;
}}

public interface DateDialogFragmentListener {
    public void updateChangedDate(int year, int month, int day);
}

public interface TimeDialogFragmentListener {
    public void updateChangedTime(int hourOfDay, int minute);
}

public void showDialogDate() {
    FragmentTransaction ftDate = getFragmentManager().beginTransaction();
    fragDate = DateDialogFragment.newInstance(this, new DateDialogFragmentListener() {
        public void updateChangedDate(int year, int month, int day) {               
            now.set(Calendar.YEAR, year);
            now.set(Calendar.MONTH, month);
            now.set(Calendar.DAY_OF_MONTH, day);
            newD = now.getTime();
            SimpleDateFormat newDFormatter = new SimpleDateFormat("dd MMM yyyy");
            strDate = newDFormatter.format(newD);
            add_button_date.setText(strDate);
        }}, now);
    fragDate.show(ftDate, "DateDialogFragment");
}

public void showDialogTime() {
    FragmentTransaction ftTime = getFragmentManager().beginTransaction();
    fragTime = TimeDialogFragment.newInstance(this, new TimeDialogFragmentListener() {
        public void updateChangedTime(int hourOfDay, int minute) {
            now.set(Calendar.HOUR_OF_DAY, hourOfDay);
            now.set(Calendar.MINUTE, minute);
            newT = now.getTime();
            SimpleDateFormat tFormatter = new SimpleDateFormat("KK:mm a");
            strTime = tFormatter.format(newT);
            add_button_time.setText(strTime);
        }}, now);
    fragTime.show(ftTime, "TimeDialogFragment");
}
}
于 2012-08-04T12:36:00.987 に答える