Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在改造中反序列化ThreeTen LocalDateTime?_Android_Retrofit_Kotlin_Threetenbp - Fatal编程技术网

Android 如何在改造中反序列化ThreeTen LocalDateTime?

Android 如何在改造中反序列化ThreeTen LocalDateTime?,android,retrofit,kotlin,threetenbp,Android,Retrofit,Kotlin,Threetenbp,我试图在改造中反序列化此类: data class Measurement(val id: Long, val value: Float, val dateTime: LocalDateTime, val trashCanId: Long) : Parcelable { companion object { @JvmField val CREATOR: Parcelable.Creator<Measurement> = object : Parcelable.

我试图在改造中反序列化此类:

data class Measurement(val id: Long, val value: Float, val dateTime: LocalDateTime, val trashCanId: Long) : Parcelable {
    companion object {
        @JvmField val CREATOR: Parcelable.Creator<Measurement> = object : Parcelable.Creator<Measurement> {
            override fun createFromParcel(source: Parcel): Measurement = Measurement(source)
            override fun newArray(size: Int): Array<Measurement?> = arrayOfNulls(size)
        }
    }

    constructor(source: Parcel) : this(source.readLong(), source.readFloat(), source.readSerializable() as LocalDateTime, source.readLong())

    override fun describeContents() = 0

    override fun writeToParcel(dest: Parcel?, flags: Int) {
        dest?.writeLong(id)
        dest?.writeFloat(value)
        dest?.writeSerializable(dateTime)
        dest?.writeLong(trashCanId)
    }

}
但是我的dateTime总是空的,所以我相信改型不知道如何解析数据,或者我遗漏了什么

有什么好的解决办法吗

感谢您的帮助

首先添加此渐变

 compile 'com.google.code.gson:gson:2.8.0'
然后添加这个类来保存json响应

public class DemoResponse {
@com.google.gson.annotations.SerializedName("id")
public int id;
@com.google.gson.annotations.SerializedName("value")
public double value;

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public double getValue() {
    return value;
}

public void setValue(double value) {
    this.value = value;
}

public Datetime getDatetime() {
    return datetime;
}

public void setDatetime(Datetime datetime) {
    this.datetime = datetime;
}

@com.google.gson.annotations.SerializedName("dateTime")
public Datetime datetime;

public static class Chronology {
    @com.google.gson.annotations.SerializedName("id")
    public String id;
    @com.google.gson.annotations.SerializedName("calendarType")
    public String calendartype;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getCalendartype() {
        return calendartype;
    }

    public void setCalendartype(String calendartype) {
        this.calendartype = calendartype;
    }
}

public static class Datetime {
    @com.google.gson.annotations.SerializedName("hour")
    public int hour;
    @com.google.gson.annotations.SerializedName("minute")
    public int minute;
    @com.google.gson.annotations.SerializedName("second")
    public int second;
    @com.google.gson.annotations.SerializedName("nano")
    public int nano;
    @com.google.gson.annotations.SerializedName("dayOfYear")
    public int dayofyear;
    @com.google.gson.annotations.SerializedName("dayOfWeek")
    public String dayofweek;
    @com.google.gson.annotations.SerializedName("month")
    public String month;
    @com.google.gson.annotations.SerializedName("dayOfMonth")
    public int dayofmonth;
    @com.google.gson.annotations.SerializedName("year")
    public int year;
    @com.google.gson.annotations.SerializedName("monthValue")
    public int monthvalue;
    @com.google.gson.annotations.SerializedName("chronology")
    public Chronology chronology;

    public int getHour() {
        return hour;
    }

    public void setHour(int hour) {
        this.hour = hour;
    }

    public int getMinute() {
        return minute;
    }

    public void setMinute(int minute) {
        this.minute = minute;
    }

    public int getSecond() {
        return second;
    }

    public void setSecond(int second) {
        this.second = second;
    }

    public int getNano() {
        return nano;
    }

    public void setNano(int nano) {
        this.nano = nano;
    }

    public int getDayofyear() {
        return dayofyear;
    }

    public void setDayofyear(int dayofyear) {
        this.dayofyear = dayofyear;
    }

    public String getDayofweek() {
        return dayofweek;
    }

    public void setDayofweek(String dayofweek) {
        this.dayofweek = dayofweek;
    }

    public String getMonth() {
        return month;
    }

    public void setMonth(String month) {
        this.month = month;
    }

    public int getDayofmonth() {
        return dayofmonth;
    }

    public void setDayofmonth(int dayofmonth) {
        this.dayofmonth = dayofmonth;
    }

    public int getYear() {
        return year;
    }

    public void setYear(int year) {
        this.year = year;
    }

    public int getMonthvalue() {
        return monthvalue;
    }

    public void setMonthvalue(int monthvalue) {
        this.monthvalue = monthvalue;
    }

    public Chronology getChronology() {
        return chronology;
    }

    public void setChronology(Chronology chronology) {
        this.chronology = chronology;
    }
    }
    }

然后,您可以将改装的响应分配给此类的对象,并使用setter检索值。

基于Manoj Frekzz答案,我找到了我的解决方案

首先,我创建了一个DateTimeDto

data class DateTimeDto(val dayOfYear : Int, val dayOfWeek : String, val month : String, val dayOfMonth : Int,
                       val year : Int, val monthValue : Int, val hour : Int, val minute : Int, val second : Int,
                       val nano : Int, val chronology : Chronology)



fun toDateTime () : LocalDateTime{
     return LocalDateTime.of(year, monthValue, dayOfMonth, hour, minute)
}
我将界面的签名更改为:

@GET("trashCan")

fun getLocalDateTime() : Observable<List<LocalDateTime>>
而且效果很好。。。如果我能自动反序列化它会更好,但这是一个很好的解决方法

@GET("trashCan")

fun getLocalDateTime() : Observable<List<LocalDateTime>>
@GET("trashCan")

fun getLocalDateTime() : Observable<List<DateTimeDto>>
ServiceGenerator.createService(ApiClient::class.java)
                .getLocalDateTime
                .map { it.map { it.toLocalDateTime() } }