Как сделать LocalDate и LocalTime разборными?
Я новичок в android, и назначаю встречу с доктором, управляющую приложением для Android, используя ThreeTenABP (так что он совместим с большим количеством устройств) LocalDate и LocalTime, которые мне нужно сделать доступными для отправки.
У меня есть комплексный класс Appcellable, который имеет экземпляры LocalDate и LocalTime в качестве атрибутов; классы, которые я не думаю, являются по умолчанию.
Я не хочу менять логику для работы с разными классами или даже с примитивами; так как эти классы широко используются в приложении. Естественно, эти атрибуты не помещаются в метод Appointment(Parcel in) автоматически, и я не знаю, как их включить, или если это вообще возможно.
Производительность очень важна, поэтому я не рассматриваю Serializable в качестве опции.
Это класс Appointment (кроме того, я позаботился о том, чтобы все остальные пользовательские объекты могли быть разборчивы)
public class Appointment implements Parcelable{
private Patient patient;
private LocalDate date;
private LocalTime time;
private Doctor doctor;
private Prescription prescription;
public Appointment(Patient patient, LocalDate date, LocalTime time, Doctor doctor, Prescription prescription) {
this.patient = patient
this.date = date;
this.time = time;
this.doctor = doctor;
this.prescription = prescription;
}
protected Appointment(Parcel in) {
patient = in.readParcelable(Patient.class.getClassLoader());
doctor = in.readParcelable(Doctor.class.getClassLoader());
prescription = in.readParcelable(Prescription.class.getClassLoader());
}
public static final Creator<Appointment> CREATOR = new Creator<Appointment>() {
@Override
public Appointment createFromParcel(Parcel in) {
return new Appointment(in);
}
@Override
public Appointment[] newArray(int size) {
return new Appointment[size];
}
};
//Class methods
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeParcelable(patient, flags);
dest.writeParcelable(doctor, flags);
dest.writeParcelable(prescription, flags);
}
}
Я уже пытался добавить дату и время в Appointment(Parcel in) и writeToParcel(), как и другие атрибуты, но он говорит, что параметры имеют неправильный тип:
Неверный 1-й тип аргумента. Найдено: 'org.threeten.bp.LocalDate', обязательно: 'android.os.Parcelable'
Я не получаю никаких сообщений об ошибках, если я оставляю его с указанием даты и времени, но приложение вылетает, когда оно попадает в метод intent.putExtra(), чтобы передать объект в соответствующее действие.
Пожалуйста помоги
0 ответов
@Override
protected Appointment(Parcel in) {
// Read objects
date = (LocalDate) in.readSerializable();
time = (LocalTime) in.readSerializable();
}
@Override
public void writeToParcel(Parcel dest, int flags) {
// Write objects
dest.writeSerializable(date);
dest.writeSerializable(time);
}
Этот пост здесь так хорошо объясняет детали производительности. Мне не нужно их здесь повторять.
Более производительным подходом было бы преобразование ваших объектов даты в long
и во время записи в посылку и преобразования их обратно в соответствующие объекты даты при чтении из посылки.