簡體   English   中英

Kotlin Gson 解析問題

[英]Kotlin Gson Parse Issue

我是 kotlin 的新手。 解析json時出現此錯誤。

致命例外:OkHttp 調度程序

com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:預期為 BEGIN_OBJECT,但在第 1 行第 2 列路徑 $ 處為 STRING,位於 com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:226)

然后它指出這一行

val homeFeed = gson.fromJson(body, list::class.java)

我的代碼:

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import com.google.gson.GsonBuilder
import com.google.gson.annotations.SerializedName
import kotlinx.android.synthetic.main.activity_main.*
import okhttp3.*
import java.io.IOException
import java.util.*

class MainActivity : AppCompatActivity() {

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

    okht()
}

fun okht(){
    val url = "https://jsonplaceholder.typicode.com/posts"
    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()

           val gson = GsonBuilder().create()
           val homeFeed = gson.fromJson(body, list::class.java)
            println(homeFeed)
        }

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

class list(val userId: Int, val id: Int, val title: String, val body: String)

它期待一個列表對象,但是正在找到一個字符串。 檢查響應是否符合您的期望。

嘗試:val listType = new TypeToken>(){}。getType()val homeFeed = new Gson()。fromJson(jsonArray,listType)

另外,我建議將列表類更改為更合適的名稱。 班級名稱應以大寫字母開頭。

杜德,為什么不使用Retrofit庫作為HTTP客戶端? 它具有一個很棒的界面,可以幫助您實現更干凈,更有條理的代碼,並且擺脫了這種復雜性。

如今,它已被業界廣泛采用

檢查一下: https : //square.github.io/retrofit/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM