Как сделать 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 и во время записи в посылку и преобразования их обратно в соответствующие объекты даты при чтении из посылки.

Другие вопросы по тегам