本文介绍了致命异常:OkHttp Dispatcher,应为Begin_ARRAY,但在第1行第1列路径处为字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从Coinmarket API获取前10枚硬币。突出显示了以下代码中出现错误的部分。我不明白为什么它会导致我的应用程序崩溃。请帮帮忙!

private fun loadFirst10Coin(){
        client = OkHttpClient()
        request = Request.Builder()
            .url(String.format("https://api.coinmarketcap.com/v1/ticker/?start=0&limit=10"))
            .build()

        client.newCall(request)
            .enqueue(object: Callback
            {
                override fun onFailure(call: Call, e: IOException) {
                    Log.d("Error", e.toString())
                }

                override fun onResponse(call: Call, response: Response) {
                    val body = response?.body!!.string()
                    val gson = Gson()
//This line is giving me error// 
**items = gson.fromJson(body, object: TypeToken<List<CoinModel>>() {}.type)**
                    runOnUiThread{
                        adapter.updateData(items)


                    }
                }


            })
    }

这是我的Logcat的外观

2022-01-27 16:14:01.224 22322-14470/com.example.cryptocheck E/AndroidRuntime: FATAL EXCEPTION: OkHttp Dispatcher
    Process: com.example.cryptocheck, PID: 22322
    com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 1 path $
        at com.google.gson.Gson.fromJson(Gson.java:975)
        at com.google.gson.Gson.fromJson(Gson.java:928)
        at com.google.gson.Gson.fromJson(Gson.java:877)
        at com.example.cryptocheck.MainActivity$loadFirst10Coin$1.onResponse(MainActivity.kt:81)
        at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:923)
     Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 1 path $
        at com.google.gson.stream.JsonReader.beginArray(JsonReader.java:349)
        at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:80)
        at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61)
        at com.google.gson.Gson.fromJson(Gson.java:963)

推荐答案

您收到的错误是因为字符串不是从";[";开始。

友好提示:您不应该再使用GSON。项目维护人员之一杰克·沃顿建议使用Moshi、Jackson或kotlinx.Serialization。

这篇关于致命异常:OkHttp Dispatcher,应为Begin_ARRAY,但在第1行第1列路径处为字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-02 11:06