Kotlin Gson Parse Issue - PullRequest
       9

Kotlin Gson Parse Issue

0 голосов
/ 16 февраля 2019

Я новичок в Котлине.Я получаю эту ошибку при разборе json.

Неустранимое исключение: OkHttp Dispatcher

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Ожидается BEGIN_OBJECT, но в строке 1 STRINGпуть к столбцу 2 в 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)

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Чувак, почему бы не использовать библиотеку Retrofit в качестве HTTP-клиента?Он имеет потрясающий интерфейс, помогая вам создавать более чистый и организованный код, а также избавляет вас от этой сложности.1005 *https://square.github.io/retrofit/

0 голосов
/ 16 февраля 2019

Ожидается объект списка, но он находит строку.Убедитесь, что ответ соответствует ожидаемому.

Попробуйте: val listType = new TypeToken> () {}. GetType () val homeFeed = new Gson (). FromJson (jsonArray, listType)

Также я рекомендую изменить класс списка так, чтобы он назывался более подходящим.И имена классов должны начинаться с заглавной буквы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...