com.google.gson.JsonSyntaxException:java.lang.NumberFormatException:预期为 int 但在第 1 行第 25 列路径 $.series_id

问题描述 投票:0回答:1

我正在调用一个 api,它告诉我使用 id 作为端点路径,api 会将它编码为 base36。

//const val id: Long = 68203991471
const val base36: String = "vbyw8mn"

interface ApiService {
    @GET("v1/series/{id}")
    suspend fun getWebtoonApi(@Path("id") id: Long = 68203991471): Response<WebtoonJson>
}

object RetrofitApi {
    private val retrofit = Retrofit.Builder()
        .baseUrl("https://api.mangaupdates.com/")
        .addConverterFactory(GsonConverterFactory.create())
        .build()
    val retrofitApi: ApiService = retrofit.create(ApiService::class.java)
}

我试过把id改成long和string,但是不行

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.webtoon_gacha, PID: 27282
    com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: Expected an int but was 68203991471 at line 1 column 25 path $.series_id
        at com.google.gson.internal.bind.TypeAdapters$7.read(TypeAdapters.java:228)
        at com.google.gson.internal.bind.TypeAdapters$7.read(TypeAdapters.java:218)
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131)
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222)
        at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:40)
        at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:27)
        at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:243)
        at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:153)
        at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
        at java.lang.Thread.run(Thread.java:818)
        Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@c36cdc, Dispatchers.Main.immediate]
    Caused by: java.lang.NumberFormatException: Expected an int but was 68203991471 at line 1 column 25 path $.series_id
        at com.google.gson.stream.JsonReader.nextInt(JsonReader.java:1172)
        at com.google.gson.internal.bind.TypeAdapters$7.read(TypeAdapters.java:226)
            ... 11 more
android retrofit2
1个回答
0
投票

Kotlin 的 Int 最大值是 10 位,而 68203991471 是 11 位,所以它正确地抛出异常。尝试为 series_id 字段使用 Long 返回类型。

© www.soinside.com 2019 - 2024. All rights reserved.