gson 应为开始_ARRAY,但在第1行第2列路径嵌套的json处为BEGIN_OBJECT

r6hnlfcb  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(203)

我有关于调用对象的问题,我认为问题是因为嵌套的json我用pojo转换为gson,但我不知道我必须改变什么代码来解决这个问题
我在启动应用程序时收到此消息
E/主要活动:需要开始_ARRAY,但在路径$的第1行第2列却是BEGIN_OBJECT
你能帮我弄清楚我必须改变什么,这样问题“期望开始_OBJECT,但是是BEGIN_ARRAY”就可以解决了吗?
这是我的原始json json
这是我的数据类

data class JadwalItem(

@field:SerializedName("jadwal")
val jadwal: Jadwal? = null,

@field:SerializedName("query")
val query: Query? = null,

@field:SerializedName("status")
val status: String? = null
)

data class Data(

@field:SerializedName("imsak")
val imsak: String? = null,

@field:SerializedName("isya")
val isya: String? = null,

@field:SerializedName("dzuhur")
val dzuhur: String? = null,

@field:SerializedName("dhuha")
val dhuha: String? = null,

@field:SerializedName("subuh")
val subuh: String? = null,

@field:SerializedName("terbit")
val terbit: String? = null,

@field:SerializedName("ashar")
val ashar: String? = null,

@field:SerializedName("tanggal")
val tanggal: String? = null,

@field:SerializedName("maghrib")
val maghrib: String? = null
)

data class Jadwal(

@field:SerializedName("data")
val data: Data? = null,

@field:SerializedName("status")
val status: String? = null
)

data class Query(

@field:SerializedName("kota")
val kota: String? = null,

@field:SerializedName("format")
val format: String? = null,

@field:SerializedName("tanggal")
val tanggal: String? = null
)

这是我服务

@GET("tanggal/{year}-{monthNumber}-{day}")
fun getPosts(
    @Path("year") year: String,
    @Path("monthNumber") monthNumber: String,
    @Path("day") day: String
): Call<Posts>

这是我的帖子.kt

class Posts : ArrayList<Data>()

这是我在主活动中调用服务

val dateNow = Calendar.getInstance().time
    val day = DateFormat.format("dd", dateNow) as String // 20
    val monthNumber = DateFormat.format("MM", dateNow) as String // 06
    val year = DateFormat.format("yyyy", dateNow) as String // 2013

    val retrofit = Retrofit.Builder()
        .baseUrl("https://api.banghasan.com/sholat/format/json/jadwal/kota/663/")
        .addConverterFactory(GsonConverterFactory.create())
        .build()

    val service: Service = retrofit.create(Service::class.java)

service.getPosts(year,monthNumber,day).enqueue(object : Callback<Posts> {
        override fun onResponse(call: Call<Posts>, response: Response<Posts>) {
            val body = response.body()
            actionBar?.title = "Latihan"
        }
        override fun onFailure(call: Call<Posts>, t: Throwable) {
            Log.e("MainActivity", t.message.toString())
        }
    })
uttx8gqw

uttx8gqw1#

JSON响应是一个“Post”对象数组,对吗?当“getPosts”方法返回“Posts”对象时,您需要的是一个表示“Post”对象的JSON,而不是一个数组。
更改您的:

class Posts : ArrayList<Data>()

data class Posts (val status: String, val query: Query, val jadwal: Jadwal) //Don't forget to use @SerializedName

在这里,您将告诉代码,您希望从API获得“Post”响应,而“Post”只不过是一个“Data”数组
创建新类

data class ListOfPost(val posts: List<Posts>)

而getPosts方法将返回CallListOfPost

相关问题