第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

有沒有辦法讓改造/gson 將雙時(shí)間戳轉(zhuǎn)換為長(zhǎng)?

有沒有辦法讓改造/gson 將雙時(shí)間戳轉(zhuǎn)換為長(zhǎng)?

慕娘9325324 2022-10-07 19:34:16
我正在開發(fā)一個(gè)Android應(yīng)用程序。我正在使用改造Gson來調(diào)用服務(wù)器并序列化/反序列化。在請(qǐng)求中,有一個(gè)包含timestamp( long) 的響應(yīng)類。有時(shí)這是double因?yàn)閕OS應(yīng)用程序的版本double用于存儲(chǔ)時(shí)間戳。有沒有辦法強(qiáng)制Gson反序列化響應(yīng)并轉(zhuǎn)換為Response類(長(zhǎng))上存在的對(duì)象?例外:Caused by com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: Expected a long but was 1555323142345.364 at line 1 column 1002 path $.userSettings.stories[4].readTimestamp       at com.google.gson.internal.bind.TypeAdapters$11.read(TypeAdapters.java:323)       at com.google.gson.internal.bind.TypeAdapters$11.read(TypeAdapters.java:313)       at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:129)       at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:220)       at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41)       at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:82)       at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61)       at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:129)       at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:220)       at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:129)       at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:220)
查看完整描述

1 回答

?
慕婉清6462132

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超2個(gè)贊

為簡(jiǎn)單起見,假設(shè)您的JSON有效負(fù)載是:


{

    "timestamp": 1555323142345.345

}

它應(yīng)該適合:


class Pojo {


    private long timestamp;


    // getters, setters, toString

}

解決方案取決于您是否可以更改Pojo模型。如果是并且您想要存儲(chǔ)double并且long可以將類型更改為Number:


private Number timestamp;

你應(yīng)該能夠解析double' 和long' 的時(shí)間戳。如果您總是想要long實(shí)現(xiàn)自定義反序列化器:


class LongOrDoubleJsonDeserializer implements JsonDeserializer<Long> {


    @Override

    public Long deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {

        if (json.isJsonPrimitive()) {

            Number number = json.getAsNumber();


            return number.longValue();

        }


        return null;

    }

}

您的Pojo財(cái)產(chǎn)應(yīng)如下所示:


@JsonAdapter(LongOrDoubleJsonDeserializer.class)

private long timestamp;

如果您無法更改Pojo課程,則需要TypeAdapterFactory使用自定義和注冊(cè)GsonBuilder。請(qǐng)參閱此鏈接:創(chuàng)建改造實(shí)例。自定義實(shí)現(xiàn)可能如下所示:


class LongOrDoubleTypeAdapterFactory implements TypeAdapterFactory {


    @Override

    public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {

        Class<? super T> rawType = type.getRawType();

        if (rawType == Long.class || rawType == long.class) {

            return new TypeAdapter<T>() {

                @Override

                public void write(JsonWriter out, T value) {

                }


                @Override

                public T read(JsonReader in) throws IOException {

                    try {

                        return (T) new Long(in.nextLong());

                    } catch (NumberFormatException e) {

                        return (T) new Long(((Double) in.nextDouble()).longValue());

                    }

                }

            };

        }

        return null;

    }

}

并注冊(cè)如下:


Gson gson = new GsonBuilder()

    .registerTypeAdapterFactory(new LongOrDoubleTypeAdapterFactory())

    .create();


查看完整回答
反對(duì) 回復(fù) 2022-10-07
  • 1 回答
  • 0 關(guān)注
  • 156 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)