Here is a snippet of code that i am working with. I am making an app for android and everything is going great except this one problem and google has not been my friend on this. I have highlighted the important parts. The problem is when the TextViews are loaded with data using the updateboxes() method everything works great. When they are loaded with the populateFields(); method the time or date picker doesnt recognize the values since they come straight from the database and not built with stringBuilder like the updateboxes() method.
Strings are not my strong point and the only thing that i can think of doing is breaking the strings back down into individual mDay mMonth mYear values and then run them back through the updateBoxes() method but i would think there would be an easier way. I wouldnt know how to do that anyway.
Here is the code:
package com.example.TimeClockAppreset;
import java.util.Calendar; import android.app.Activity; import android.app.DatePickerDialog; import android.app.Dialog; import android.app.TimePickerDialog; import android.database.Cursor; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.DatePicker; import android.widget.Spinner; import android.widget.TextView; import android.widget.TimePicker; import android.widget.AdapterView.OnItemSelectedListener;
public class TimesEdit extends Activity{
private TimesDbAdapter mDbHelper;
private Long mRowId;
private TextView mDateBox;
private TextView mTimeBox;
private int mYear;
private int mMonth;
private int mDay;
private int mHour;
private int mMinute;
static final int TIME_DIALOG_ID = 0;
static final int DATE_DIALOG_ID = 1;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mDbHelper = new TimesDbAdapter(this);
mDbHelper.open();
setContentView(R.layout.entry_edit);
mDateBox = (TextView) findViewById(R.id.DateBox);
mTimeBox = (TextView) findViewById(R.id.TimeBox);
Button changeTime = (Button) findViewById(R.id.changeTime);
Button changeDate = (Button) findViewById(R.id.changeDate);
Button confirmButton = (Button) findViewById(R.id.confirm);
Spinner spinner = (Spinner) findViewById(R.id.spinner);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.ClockBox_array, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new MyOnItemSelectedListener());
mRowId = (savedInstanceState == null) ? null :
(Long) savedInstanceState.getSerializable(TimesDbAdapter.KEY_ROWID);
if (mRowId == null) {
Bundle extras = getIntent().getExtras();
mRowId = extras != null ? extras.getLong(TimesDbAdapter.KEY_ROWID)
: null;
}
//updateBoxes();
populateFields();
changeTime.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
showDialog(TIME_DIALOG_ID);
}
});
changeDate.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
showDialog(DATE_DIALOG_ID);
}
});
confirmButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
setResult(RESULT_OK);
finish();
}
});
}
//THIS GETS THE INFO AND POPULATES THE FIELDS
private void populateFields() {
if (mRowId != null) {
Cursor time = mDbHelper.fetchTime(mRowId);
startManagingCursor(time);
mDateBox.setText(time.getString(
time.getColumnIndexOrThrow(TimesDbAdapter.KEY_DATE)));
mTimeBox.setText(time.getString(
time.getColumnIndexOrThrow(TimesDbAdapter.KEY_TIME)));
}
else
updateBoxes();
}
private void updateBoxes() {
final Calendar c = Calendar.getInstance();
mYear = c.get(Calendar.YEAR);
mMonth = c.get(Calendar.MONTH);
mDay = c.get(Calendar.DAY_OF_MONTH);
mHour = c.get(Calendar.HOUR_OF_DAY);
mMinute = c.get(Calendar.MINUTE);
updateDateDisplay();
updateTimeDisplay();
}
private void updateDateDisplay() {
mDateBox.setText(
new StringBuilder()
// Month is 0 based so add 1
.append(mMonth + 1).append("-")
.append(mDay).append("-")
.append(mYear).append(" "));
}
private void updateTimeDisplay() {
mTimeBox.setText(
new StringBuilder()
.append(pad(mHour)).append(":")
.append(pad(mMinute)));
}
private static String pad(int c) {
if (c >= 10)
return String.valueOf(c);
else
return "0" + String.valueOf(c);
}
public class MyOnItemSelectedListener implements OnItemSelectedListener {
public void onItemSelected(AdapterView<?> parent,
View view, int pos, long id) {
}
@SuppressWarnings("unchecked")
public void onNothingSelected(AdapterView parent) {
// Do nothing.
}
}
private TimePickerDialog.OnTimeSetListener mTimeSetListener =
new TimePickerDialog.OnTimeSetListener() {
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
mHour = hourOfDay;
mMinute = minute;
updateTimeDisplay();
}
};
private DatePickerDialog.OnDateSetListener mDateSetListener =
new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
mYear = year;
mMonth = monthOfYear;
mDay = dayOfMonth;
updateDateDisplay();
}
};
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DATE_DIALOG_ID:
return new DatePickerDialog(this, mDateSetListener, mYear, mMonth, mDay);
case TIME_DIALOG_ID:
return new TimePickerDialog(this, mTimeSetListener, mHour, mMinute, false);
}
return null;
}
private void saveState() {
String date = mDateBox.getText().toString();
String time = mTimeBox.getText().toString();
String inOut = "NA";
if (mRowId == null) {
long id = mDbHelper.createEntry(time, date, inOut);
if (id > 0) {
mRowId = id;
}
} else {
mDbHelper.updateTimeTest(mRowId, time, date);
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
saveState();
outState.putSerializable(TimesDbAdapter.KEY_ROWID, mRowId);
}
@Override
protected void onPause() {
super.onPause();
saveState();
}
@Override
protected void onResume() {
super.onResume();
populateFields();
}
}
Any help would be appreciated. This problem is driving me crazy considering everything else is good to go.