gpt4 book ai didi

java - kotlin com.google.gson.JsonSyntaxException : java. lang.IllegalStateException:预期为 BEGIN_OBJECT,但在第 1 行第 2 列路径 $ 处为 BEGIN_ARRAY

转载 作者:行者123 更新时间:2023-12-02 00:03:04 24 4
gpt4 key购买 nike

我尝试在 Kotlin 中使用 OKHttp 解析 JSON 字符串,但它给了我以下错误并且应用程序崩溃:

2019-09-30 15:27:24.871 4808-4933/com.kabelash.kotlinrepo E/AndroidRuntime:致命异常:OkHttp 调度程序 进程:com.kabelash.kotlinrepo,PID:4808 com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为 BEGIN_OBJECT,但在第 1 行第 2 列路径 $ 处为 BEGIN_ARRAY 在 com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:226)

我的MainActivity.kt

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

recyclerView_main.layoutManager = LinearLayoutManager(this);

fetchJson()

}

fun fetchJson() {
val url = "https://api.myurl.com/"

val request = Request.Builder().url(url).build()
val client = OkHttpClient()
client.newCall(request).enqueue(object: Callback{
override fun onResponse(call: Call, response: Response) {
val body = response.body?.string()
println(body)

val gson = GsonBuilder().create()

val feed = gson.fromJson(body, Feed::class.java)

runOnUiThread {
recyclerView_main.adapter = MainAdapter(feed)
}
}

override fun onFailure(call: Call, e: IOException) {
println("Request Failed")
}
})
}
}

class Feed (val name: String, val created_at: String, val owner: Owner)

class Owner (val login: String, val avatar_url: String)

我的MainAdapter.kt

class MainAdapter(val feed: Feed): RecyclerView.Adapter<CustomViewHolder>(){

override fun getItemCount(): Int {
return feed.name.count()
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CustomViewHolder {
val layoutInflater = LayoutInflater.from(parent.context)
val rowCell = layoutInflater.inflate(R.layout.repo_row, parent, false)
return CustomViewHolder(rowCell)
}

override fun onBindViewHolder(holder: CustomViewHolder, position: Int) {
val fd = feed.name.get(position)
holder.view.titleText.text = fd.toString()
}

}

class CustomViewHolder(val view: View): RecyclerView.ViewHolder(view) {
}

我花了很多时间,但仍然无法弄清楚。我该如何解决呢?有什么建议吗?

最佳答案

API 返回 Json 对象数组。因此您需要将其解析为数组。

而不是 val feed = gson.fromJson(body, Feed::class.java)你应该输入 val feed = gson.fromJson(body, Array<Feed>::class.java)

主适配器

class MainAdapter(val feed: Array<Feed>): RecyclerView.Adapter<CustomViewHolder>(){

override fun getItemCount(): Int {
return feed.count()
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CustomViewHolder {
val layoutInflater = LayoutInflater.from(parent.context)
val rowCell = layoutInflater.inflate(R.layout.repo_row, parent, false)
return CustomViewHolder(rowCell)
}

override fun onBindViewHolder(holder: CustomViewHolder, position: Int) {
val fd = feed.get(position)
holder.view.titleText.text = fd.name.toString()
}

}

class CustomViewHolder(val view: View): RecyclerView.ViewHolder(view) {
}

关于java - kotlin com.google.gson.JsonSyntaxException : java. lang.IllegalStateException:预期为 BEGIN_OBJECT,但在第 1 行第 2 列路径 $ 处为 BEGIN_ARRAY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58170753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com