Retrofit Enqueue解析Json对象,不需要额外的类



我有工作代码,允许我解析Json文件,我从一个改进的API get调用。然而,我目前这样做的方式需要两个类(其中一个只是一个包含另一个的列表),如果我想知道是否有可能用单个数据类做到这一点。更多的解释如下。

我有什么:

接口:

interface ApiInterface {
@GET(value = "all_people.php")
fun getAllPeople(): Call<People>
}

代码:

retrofit: ApiInterface = Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(BASE_URL)
.build()
.create(ApiInterface::class.java)
retrofit.getAllPeople().enqueue(object : Callback<People?> {
override fun onResponse(call: Call<People?>, response: Response<People?>) {
Log.d("First person", responce.body()!!.people[0])
}
override fun onFailure(call: Call<People?>, t: Throwable) {}
})

数据类:

data class Person (
val firstName: String,
val lastName: String
)
data class People (
val people: List<Person>
)

THIS IS WORKING

问题是这需要一个额外的类(People)。这是因为我从API返回一个JSON对象(其中包含我想要访问的JSON数组)。当我看到这样的场景时,这是我在网上找到的解决方案,但是,该方法要求我为每个不同的API调用创建一个额外的类,仅包含一个列表。这显然不理想。

问题:我的问题是,我该如何做到这一点,同时消除阶级的人?

我想做这样的事情:

接口:

interface ApiInterface {
@GET(value = "all_people.php")
fun getAllPeople(): Call<List<Person>>
}

代码:

retrofit: ApiInterface = Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(BASE_URL)
.build()
.create(ApiInterface::class.java)
retrofit.getAllPeople().enqueue(object : Callback<List<Person>?> {
override fun onResponse(call: Call<List<Person>?>, response: Response<List<Person>?>) {
//The issue is here, because this is a Json object, and I am treating it like a list
//Is there a way of access the Json array inside this Json object without creating the person class?
Log.d("First person", responce.body()!![0]) 
}
override fun onFailure(call: Call<List<Person>?>, t: Throwable) {}
})

然而,我不知道如何"打开"。Json对象使其工作,因此得到这个错误代码:

我想出了一些有用的东西,但我不认为它是理想的。而不是使用内置的GsonConverter来改造,我自己做。

在onResponse中我做了以下操作

val peopleList = GsonBuilder()
.create()
.fromJson(response.body()!!.getAsJsonArray("people"), Array<Person>::class.java).toList()
Log.d("First person", peopleList!![0])

我不确定这是否比仅仅有额外的数据类更好,尽管

相关内容

  • 没有找到相关文章

最新更新