选择条目时,UI 按钮上不会显示房间数据库中的日期

Date from room database wont show on the UI button when entry is selected

提问人:rachel 提问时间:11/13/2023 最后编辑:rachel 更新时间:11/16/2023 访问量:54

问:

我在使用 Java 开发的 Android 应用程序时遇到了一个问题,即在单击假期列表中的假期条目以在用户界面上显示假期的详细信息时,日期没有更新开始日期和结束日期的按钮。除日期外,其余详细信息将填充 UI 元素。我目前有一些代码不起作用,并且由于某种原因,无论我做什么,都将日期返回为 12/31/1969,即使数据库中存储了正确的日期。 在这一点上,我不知所措。请帮帮我。

包含代码的文件:

public class VacationDetails extends AppCompatActivity {
    Repository repository;
    String name;
    String hotel;
    int vacationID;
    Date startdate;
    Date enddate;

    boolean isNewVacation;

    EditText editName;
    EditText editHotel;


// DATE CODE
    Button buttonStartDate;
    Button buttonEndDate;
    DatePickerDialog.OnDateSetListener myDate;
    DatePickerDialog.OnDateSetListener myEndDate;
    final Calendar myCalendar=Calendar.getInstance();
    final Calendar myEndDateCalendar=Calendar.getInstance();


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_vacation_details);
        FloatingActionButton fab=findViewById(R.id.floatingActionButton2);

        if(getIntent().getIntExtra("id", -5) == -5) isNewVacation = true;
            else isNewVacation = false;

        editName=findViewById(R.id.titletext);
        editHotel=findViewById(R.id.hoteltext);
        name = getIntent().getStringExtra("name");
        hotel = getIntent().getStringExtra("hotel");
        editName.setText(name);
        editHotel.setText(hotel);

        //code for dates possibly goes here
        buttonStartDate=findViewById(R.id.button);
        buttonEndDate=findViewById(R.id.buttonEnd);

//        startdate = (Date) getIntent().getSerializableExtra("Start Date");
        enddate = (Date) getIntent().getSerializableExtra("End Date");
        String myFormat = "MM/dd/yy";
        SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
        String currentStartDate=sdf.format(new Date());

//        buttonStartDate.setText(sdf.format(startdate));
        buttonStartDate.setText(DateTypeConverter.toStringFromDate(startdate));


        //onClick for the startDate
        buttonStartDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Date date;
                String info=buttonStartDate.getText().toString();
                try{
                    myCalendar.setTime(sdf.parse(info));
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                new DatePickerDialog(VacationDetails.this, myDate,
                        myCalendar.get(Calendar.YEAR),
                        myCalendar.get(Calendar.MONTH),
                        myCalendar.get(Calendar.DAY_OF_MONTH)).show();
            }
        });

        //onClick for the EndDate
        buttonEndDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Date date;
                String info=buttonEndDate.getText().toString();
                try{
                    myEndDateCalendar.setTime(sdf.parse(info));
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                new DatePickerDialog(VacationDetails.this, myEndDate,
                        myEndDateCalendar.get(Calendar.YEAR),
                        myEndDateCalendar.get(Calendar.MONTH),
                        myEndDateCalendar.get(Calendar.DAY_OF_MONTH)).show();
            }
        });

        //DATE PICKER UPDATER startDAte
        myDate=new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
                myCalendar.set(Calendar.YEAR, year);
                myCalendar.set(Calendar.MONTH, month);
                myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                updateStartDateLabel();
                startdate = myCalendar.getTime();
            }
        };
        //DATE PICKER updater endDate
        myEndDate=new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
                myEndDateCalendar.set(Calendar.YEAR, year);
                myEndDateCalendar.set(Calendar.MONTH, month);
                myEndDateCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                updateEndDateLabel();
                enddate = myEndDateCalendar.getTime();
            }
        };

        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(VacationDetails.this, ExcursionDetails.class);
                startActivity(intent);
            }
        });

        RecyclerView recyclerView = findViewById(R.id.excursionrecyclerview);
        repository = new Repository(getApplication());
        final ExcursionAdapter excursionAdapter = new ExcursionAdapter(this);
        recyclerView.setAdapter(excursionAdapter);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        excursionAdapter.setExcursions(repository.getAllExcursions());

    }

    //DATE PICKER METHOD startdate
    private void updateStartDateLabel(){
        String myFormat = "MM/dd/yy";
        SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
        buttonStartDate.setText(sdf.format(myCalendar.getTime()));
    }
    //date picker method enddate
    private void updateEndDateLabel(){
        String myFormat = "MM/dd/yy";
        SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
        buttonEndDate.setText(sdf.format(myEndDateCalendar.getTime()));
    }
}

道:

@Dao
public interface VacationDAO {
    @Insert(onConflict = OnConflictStrategy.IGNORE)
    void insert(Vacation vacation);

    @Update
    void update(Vacation vacation);

    @Delete
    void delete(Vacation vacation);

    @Query("SELECT * FROM VACATIONS ORDER BY vacationID ASC")
    List<Vacation> getAllVacations();

}

datetype转换器:

public class DateTypeConverter {
private static final String DATE_FORMAT = "MM/dd/yy";

    @TypeConverter
    public static Date toDate(Long timestamp) {
        return timestamp == null ? null : new Date(timestamp);
    }

    @TypeConverter
    public static Long toTimestamp(Date date) {
        return date == null ? null : date.getTime();
    }

    @TypeConverter
    public static Date toDateFromString(String dateString) {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT, Locale.US);
            return dateString == null ? null : sdf.parse(dateString);
        } catch (ParseException e) {
            e.printStackTrace();
            return null;
        }
    }

    @TypeConverter
    public static String toStringFromDate(Date date) {
        return date == null ? null : new SimpleDateFormat(DATE_FORMAT, Locale.US).format(date);
    }
}

实体:

@Entity(tableName = "vacations")
@TypeConverters(DateTypeConverter.class)
public class Vacation {
    @PrimaryKey(autoGenerate = true)
    private int vacationID;
    private String vacationName;
    private String hotelName;

    @TypeConverters(DateTypeConverter.class)
    private Date startDate;

    @TypeConverters(DateTypeConverter.class)
    private Date endDate;


    public Vacation(int vacationID, String vacationName, String hotelName, Date startDate, Date endDate) {
        this.vacationID = vacationID;
        this.vacationName = vacationName;
        this.hotelName = hotelName;
        this.startDate = startDate;
        this.endDate = endDate;
    }
java android xml

评论


答: 暂无答案