android - 另一个“预期为 BEGIN_OBJECT 但为 BEGIN_ARRAY”的问题
问题描述
我正在尝试更改此项目代码 ( https://github.com/rygelouv/networkcall-sample ) 以从另一个 URL 获取数据,但我无法修复“预期 BEGIN_OBJECT 但为 BEGIN_ARRAY”响应错误。Json响应就像
[{"value":"1","label":"ADMIN"},{"value":"2","label":"EMPLOYEE_1"}...]
而最初的回应是
{"count": 61700,"result: false,"items": [{"id": 3436,"node":DEwOlJlyMjY2"...},{....}]}
我知道我必须更改返回类型以接受 Array 类型,但由于 DSL,我无法弄清楚如何/在哪里做。在下面的代码中,我只更改了存储库类以满足我的需要:
object Repository {
fun getRepos() = networkCall<ReposResponse, List<Employee>> {
client = GithubAPI.githubService.getRepos()
var result = GithubAPI.githubService.getRepos()
}
}
data class Employee(
@SerializedName("label")
val name: String,
@SerializedName("value")
val idEmployee: String
)
data class ReposResponse(val items: List<Employee>): BaseApiResponse<Employee>(), DataResponse<List<Employee>> {
override fun retrieveData(): List<Employee> = items
}
abstract class BaseApiResponse<T> {
var total_count: Int = 0
var incomplete_results: Boolean = false
}
object GithubAPI {
var API_BASE_URL: String = "my_url"
var httpClient = OkHttpClient.Builder()
var builder: Retrofit.Builder = Retrofit.Builder()
.baseUrl(API_BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(CoroutineCallAdapterFactory())
var retrofit = builder
.client(httpClient.build())
.build()
var githubService = retrofit.create<GithubService>(GithubService::class.java)
interface GithubService {
@GET("workstation")
fun getRepos(): Deferred<Response<ReposResponse>>
}
我必须进行哪些更改才能使其适用于我的数据类?
解决方案
应为 BEGIN_OBJECT,但为 BEGIN_ARRAY
JsonSyntaxException
当 Gson 尝试读取(或写入)格式错误的 JSON 元素时会引发此异常。
您应该更改接口回调参数。添加列表类型。
interface GithubService {
@GET("workstation")
fun getRepos(): Deferred<Response<List<Employee>>
}
推荐阅读
- android - 这是在Android中使用/初始化数据绑定的正确方法
- java - 使用 JSoup 通过 Clojure 解析字符串
- javascript - 我的 id 的自动增量计数器(Codeigniter)
- linux - linux头文件中的asm vs asm-generic——它们是一样的吗
- angular-ngrx-data - 带有@NGRX/Data 的自定义端点
- java - Spring Controller 无法正确读取表单数据字符串 XML
- flutter - 在颤振中更改应用程序的起始飞镖文件
- c# - where 子句中的计算值
- python - 如何根据元组中的变量对元组列表进行排序
- python - Django:第 14 行的块标记无效:'endblock',预期为 'endfor'。您是否忘记注册或加载此标签?