gpt4 book ai didi

java - 为什么我对模拟api的调用未按预期解析数据?

转载 作者:行者123 更新时间:2023-12-02 13:29:44 25 4
gpt4 key购买 nike

我正在尝试调试,并找出无法正常工作的原因以及如何使其正常工作。

MainActivity.kt

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

...

fetchJson()
}

所以这只是调用我的函数 fetchJson
这是功能:
fun fetchJson() {
println("Attempting to Fetch JSON")

val url = "https://www.mocky.io/v2/5ed340ab340000650001f28c"

val request = Request.Builder().url(url).build()

val client = OkHttpClient()
client.newCall(request).enqueue(object: okhttp3.Callback {
override fun onFailure(call: okhttp3.Call, e: IOException) {
println("Failed to execute request")
}

override fun onResponse(call: okhttp3.Call, response: okhttp3.Response) {
val body = response?.body?.string()
println(body)
println("success")
val gson = GsonBuilder().create()

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

/* runOnUiThread {
recycler_view.adapter = MainAdapter(homeFeed)
}*/
}

})

其背后的想法是,您获取JSON数据并将其放入适配器类中,并在卡 View 中显示它们。

我的问题不是适配器或卡 View ,而是其余的API。它不想与我的模拟REST API一起使用,但可以与其他REST API一起使用。我不确定为什么吗?

我试图添加一个网络安全异常,我不得不删除我的适配器类以使其成功。当我收到onresponse调用时,我仍然无法在控制台中找到JSON主体,并且因为我在调试控制台中没有收到错误,所以我不知道发生了什么。

我不知道这里什么不起作用。是GSON转换器吗?其余的API是我的代码吗?我的模拟器有问题吗?...等?

主体应打印到控制台的类:
class note(val noteis: List<Mlist>)

class Mlist(val text1: String, val text2: String, val text3: String)

最佳答案

我可以看到两个问题:

  • onFailure方法中没有stacktrace。让我们添加它:
  • println("Failed to execute request, $e")

    现在运行此命令即可返回 PKIX path building failed: (...) unable to find valid certification path to requested target这会失败,因为Java不信任 www.mocky.io的证书。您可以通过更改 OkHttpClient的配置来添加或忽略它,但是现在,我们仅将URL从 https://更改为 http://即可。

    进行此更改后,您应该将响应正文打印出来,如果不是这样,则您的错误超出了提供的代码范围。
  • 响应类与json数据不匹配。

  • 链接中的JSON数据如下所示:
    {
    "Mlist": {
    "text1": "text1a",
    "text2": "text2a",
    "text3": "text3a"
    }
    }

    因此,它不是 Mlist对象的列表,而是名为 Mlist的字段中的单个对象。
    为此,我们可以:

    a)更改 note类中的字段名称
    class note(val Mlist: Mlist)

    b)使用 @SerializedName批注
        @SerializedName("Mlist")
    val notes: Mlist

    顺便说一句。您可以将 noteMlist更改为 data class,以便能够使用 print*方法查看其内容。

    关于java - 为什么我对模拟api的调用未按预期解析数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62133038/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com