Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android中,如何访问使用2获取的JSON响应中键内键的值?_Android_Json_Retrofit2 - Fatal编程技术网

在android中,如何访问使用2获取的JSON响应中键内键的值?

在android中,如何访问使用2获取的JSON响应中键内键的值?,android,json,retrofit2,Android,Json,Retrofit2,我正在访问WordPress API以使用Reformation2获取帖子,然后当我尝试将值分配给适配器中的视图时: inner class MainActivityViewHolder(view: View) : RecyclerView.ViewHolder(view) { fun bind(post: Post) { with(post) { itemView.tv_post_title.text = title it

我正在访问WordPress API以使用Reformation2获取帖子,然后当我尝试将值分配给适配器中的视图时:

inner class MainActivityViewHolder(view: View) : RecyclerView.ViewHolder(view) {
    fun bind(post: Post) {
        with(post) {
            itemView.tv_post_title.text = title
            itemView.tv_post_date.text = date
            itemView.tv_post_content.text = content
        }
    }
}
改装的
GET
返回一个
可观察的
,因此,当它尝试分配时,
onErrorResumeNext
中显示以下错误:

java.lang.IllegalStateException:应为字符串,但在第1行第373列路径$[0]处为BEGIN_对象。标题

这是因为
标题
键中有一个
呈现的
键:

{  
  id:497,
  date:"2018-04-08T03:34:12",
  [...]
  title:{  
    rendered:"Lorem ipsum dolor sit amet"
  }
}
这同样适用于
内容
摘录
。如何访问这些
渲染的
s键?我试过类似的东西

val title:JsonElement=JsonParser().parse(post.title)


但同样的错误仍然存在。

发生这种情况是因为json解析器无法解析title对象

java.lang.IllegalStateException:应为字符串,但在第1行第373列路径$[0]处为BEGIN_对象。标题

以避免此运行时错误,然后将其用作改装api中的返回类型

尝试为您的json使用以下JavaPOJO,该json是使用上述工具创建的

Post.kt

data class Post(
    @PrimaryKey(autoGenerate = true)
    @SerializedName("id")
    val id: Int,

    @SerializedName("title")
    @Embedded
    val title: Title,

    @SerializedName("excerpt")
    @Embedded
    val excerpt: Excerpt,

    @SerializedName("content")
    @Embedded
    val content: Content,

    @SerializedName("date")
    val date: String,

    @SerializedName("modified")
    val modified: String
)
Content.kt

class Content {
    @SerializedName("rendered")
    var content: String? = null
}
Title.kt

class Title {
    @SerializedName("rendered")
    var title: String? = null
}
摘录.kt

class Excerpt {
    @SerializedName("rendered")
    var excerpt: String? = null
}
导入Gson的以下依赖项

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
@SerializedName:允许将JSON键映射为具有不同于JSON键名称的java成员变量。


这是因为json解析器无法解析title对象

java.lang.IllegalStateException:应为字符串,但在第1行第373列路径$[0]处为BEGIN_对象。标题

以避免此运行时错误,然后将其用作改装api中的返回类型

尝试为您的json使用以下JavaPOJO,该json是使用上述工具创建的

Post.kt

data class Post(
    @PrimaryKey(autoGenerate = true)
    @SerializedName("id")
    val id: Int,

    @SerializedName("title")
    @Embedded
    val title: Title,

    @SerializedName("excerpt")
    @Embedded
    val excerpt: Excerpt,

    @SerializedName("content")
    @Embedded
    val content: Content,

    @SerializedName("date")
    val date: String,

    @SerializedName("modified")
    val modified: String
)
Content.kt

class Content {
    @SerializedName("rendered")
    var content: String? = null
}
Title.kt

class Title {
    @SerializedName("rendered")
    var title: String? = null
}
摘录.kt

class Excerpt {
    @SerializedName("rendered")
    var excerpt: String? = null
}
导入Gson的以下依赖项

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
@SerializedName:允许将JSON键映射为具有不同于JSON键名称的java成员变量。


请添加您的代码。进行了一些更改。请添加您的代码。进行了一些更改。嘿,这确实有帮助。但这会导致另一个问题。由于我有多个字段的子关键字为
rendered
,如果将许多@Embedded类命名为
rendered
,它会抱怨说“多个字段具有相同的列名:rendered”。以不同方式重命名它们不会读取该值。请提供有关错误的更多详细信息以及您尝试解析的示例json?该问题与
标题:{rendered:“foo”}
,但还有另外两个键,其中
rendered
content
extract
,这会导致错误
错误:(8, 8)错误:多个字段具有相同的列名:rendered。字段名:title>rendered,content>rendered,extract>rendered。
。我找到了附加前缀的解决方案,但在本例中,它们正在创建JSON格式,在本例中,我获取一种已定义的格式,并且不会显示与
rendered
不同的名称任何内容。如果您想查看JSON:@gamofe,请检查编辑的答案。如果您想操作JSON映射,请使用Gson或任何其他类似的解析器。由于映射变量不同于JSON键,因此错误应该消失。使用Gson的
SerializedName
解决了这个问题。您只需在答案中编辑一件事:var的名称其他3个类中的变量不能相同,只有序列化名称应该是
呈现的
。嘿,这确实有帮助。但它导致了另一个问题。因为我有多个字段具有
呈现的
作为子关键字,如果将许多@Embedded类命名为
呈现的
,它会抱怨说“多个字段具有相同的columnName:rendered”。以不同方式重命名它们将不会读取该值。您能否提供有关错误的详细信息以及您试图解析的json示例?问题就像
标题:{rendered:“foo”}}
,但是还有另外两个键,
内容和
摘录,里面有
呈现的
,这会导致错误
错误:(8,8)错误:多个字段具有相同的列名:rendered。字段名:title>rendered,content>rendered,extract>rendered。
。我找到了附加前缀的解决方案,但在本例中,它们正在创建JSON格式,在本例中,我获取一种已定义的格式,并且不会显示与
rendered
不同的名称任何内容。如果您想查看JSON:@gamofe,请检查编辑的答案。如果您想操作JSON映射,请使用Gson或任何其他类似的解析器。由于映射变量不同于JSON键,因此错误应该消失。使用Gson的
SerializedName
解决了这个问题。您只需在答案中编辑一件事:var的名称其他3个类中的变量不能相同,只有序列化的名称应
呈现