亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

kotlin com.google.gson.JsonSyntaxException:

kotlin com.google.gson.JsonSyntaxException:

慕斯709654 2023-09-13 16:46:11
我嘗試在 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 列路徑 $ 位于 com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:226) 處為 BEGIN_ARRAY我的 MainActivity.ktclass 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)我在其中花了很多時間,但仍然無法弄清楚。我該如何解決呢?有什么建議么?
查看完整描述

2 回答

?
哆啦的時光機

TA貢獻1779條經驗 獲得超6個贊

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) {

}


查看完整回答
反對 回復 2023-09-13
?
繁星coding

TA貢獻1797條經驗 獲得超4個贊

您的問題在于該行:val feed = gson.fromJson(body, Feed::class.java)。這將獲取 json 并嘗試反序列化為您提供的類。但是,Feed是一個對象,并且您的 json 是數組的形式,因此當 gson 反序列化時,它{在開始時需要 a 。相反,它看到的是[.

有幾個選項可以解決這個問題:

  • 如果您有權訪問 json 的源,請修改以適合對象Feed。

  • 更改Feed為擴展List<T>Array<T>.

  • 將列表/數組類型傳遞給 gson。


查看完整回答
反對 回復 2023-09-13
  • 2 回答
  • 0 關注
  • 122 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號