【问题标题】:Cannot get data from JSON of api in Kotlin无法从 Kotlin 中的 api 的 JSON 获取数据
【发布时间】:2020-04-14 11:30:43
【问题描述】:

我必须在一个项目中使用 Kotlin。假设我有一些名为 Note 的对象。我通过以下方式制作了文件

@Parcelize 
data class Notes (
val notes: List<Note>
): Parcelable

@Parcelize 
data class Note (
val id: Int,
val text: String
): Parcelable

我注意到如果返回的 JSON 结构如下,我还添加了@SerializedName("all_notes")

{
"all_notes": [
    {
       "id": 1,
       "text": "Some text"
    },

它可以工作,但如果返回的 JSON 是这样的结构,我删除 @SerializedName 表示法

[
  {
    "id": 1,
    "text": "Some text"
  },

我无法获取数据。

我猜我必须以某种方式使用序列化名称,但我不确定如何使用。我需要使用第二种 JSON 文件。有人可以帮忙吗?

编辑:有人提出发布我得到的错误的想法,所以在这里

我现在得到的错误是

错误:java.lang.IllegalStateException:应为 BEGIN_OBJECT 但为 BEGIN_ARRAY 在第 1 行第 2 列路径 $

正如我之前所说,当我使用其他 JSON 文件时它可以工作。如果我只为 API 中的一个对象排队并且我说 Notes 只是来自 Note 的变量,它也可以正常工作。我没有收到任何错误,我会打印出那张便条。

【问题讨论】:

  • 对于您的第二个 json,返回类型应直接为 List&lt;Note&gt;
  • 哦,对不起,是的,我实际上在我的代码中将它写为 List。我将更新上面的代码。谢谢。
  • 来自评论:如果有问题,请尽可能提供您的stacktrace。如果用户不知道您的问题是什么,他们将无法提供帮助。谢谢
  • 好的,马上添加。谢谢你的建议。
  • 感谢编辑。错误清楚地表明您的映射器需要List 类型的对象,但您的json 包含和array。请在下面阅读我的答案:TL;DR,您不需要第一堂课。你只需要第二个。

标签: android api android-studio kotlin


【解决方案1】:

我认为您的data 课程和json 都没有问题。除了你不需要第一个 data 类。您可以使用您的第二类直接映射您的 json,因为您的 json 不会以列表响应。

这可能对您有所帮助。使用此 website 为您的 json 响应构造一个 kotlin 数据类。

您不需要使用SerializedName 注释,除非您的data 类字段的名称与您的json 属性不同,因为它只是Gson 在将json 映射到您的类实例。

如果以上内容对您没有帮助,请进一步澄清您的问题,我们需要知道您的问题到底是什么,或者stacktrace如果您有任何问题。

【讨论】:

  • 我非常非常感谢,我不知道如何,但这就是问题所在。我正在使用一个接口来获取数据,直到现在我让它返回 Call,但是现在我将它更改为 Call> 完美运行,非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-21
  • 1970-01-01
  • 1970-01-01
  • 2018-10-25
  • 2017-02-13
  • 2020-11-16
  • 1970-01-01
相关资源
最近更新 更多