[英]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.