- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在尝试学习如何在 Kotlin 编程语言中实现 Retrofit2 和 Moshi。但是,我似乎在尝试编译我的代码时遇到了麻烦。
我定义了以下数据类/模型,这些数据类/模型映射到我从正在点击的 api 收到的 json 响应:
@JsonClass(generateAdapter = true)
data class Catalogs(
val languages: List<LanguageCatalog>
)
@JsonClass(generateAdapter = true)
data class LanguageCatalog(
val direction: String,
val identifier: String,
val title: String,
val resources: List<ResourceCatalog>
)
@JsonClass(generateAdapter = true)
data class Project(
val identifier: String,
val sort: Int,
val title: String,
val versification: String?
)
@JsonClass(generateAdapter = true)
data class ResourceCatalog(
val identifier: String,
val modified: String,
val projects: List<Project>,
val title: String,
val version: String
)
然后我有一个定义 API 行为的接口(interface):
interface Door43Service
{
@GET("v3/catalog.json")
fun getFormat() : Observable<Catalogs>
companion object
{
fun create(): Door43Service
{
val retrofit = Retrofit.Builder()
.addCallAdapterFactory(
RxJava2CallAdapterFactory.create()
)
.addConverterFactory(
MoshiConverterFactory.create()
)
.baseUrl("https://api.door32.org/")
.build()
return retrofit.create(Door43Service::class.java)
}
}
}
最后,我在一个 main 函数中实现了一切,以从 api 获取 json 数据:
val door43Service by lazy {
Door43Service.create()
}
var disposable: Disposable? = null
fun main(args: Array<String>)
{
door43Service.getFormat()
.subscribe(
{ result -> println(result.languages)},
{ error -> println(error.message)}
)
}
从 api 返回的数据很长,但是可以在 http://api-info.readthedocs.io/en/latest/door43.html 找到它的示例
我的问题是我的堆栈中出现以下错误:
Exception in thread "main" java.lang.IllegalArgumentException: Unable to create converter for class model.Catalogs
for method Door43Service.getFormat
at retrofit2.ServiceMethod$Builder.methodError(ServiceMethod.java:755)
at retrofit2.ServiceMethod$Builder.createResponseConverter(ServiceMethod.java:741)
at retrofit2.ServiceMethod$Builder.build(ServiceMethod.java:172)
at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:170)
at retrofit2.Retrofit$1.invoke(Retrofit.java:147)
at com.sun.proxy.$Proxy0.getFormat(Unknown Source)
at MainKt.main(main.kt:11)
Caused by: java.lang.RuntimeException: Failed to find the generated JsonAdapter class for class model.Catalogs
at com.squareup.moshi.StandardJsonAdapters.generatedAdapter(StandardJsonAdapters.java:249)
at com.squareup.moshi.StandardJsonAdapters$1.create(StandardJsonAdapters.java:62)
at com.squareup.moshi.Moshi.adapter(Moshi.java:130)
at retrofit2.converter.moshi.MoshiConverterFactory.responseBodyConverter(MoshiConverterFactory.java:91)
at retrofit2.Retrofit.nextResponseBodyConverter(Retrofit.java:330)
at retrofit2.Retrofit.responseBodyConverter(Retrofit.java:313)
at retrofit2.ServiceMethod$Builder.createResponseConverter(ServiceMethod.java:739)
... 5 more
Caused by: java.lang.ClassNotFoundException: model.CatalogsJsonAdapter
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at com.squareup.moshi.StandardJsonAdapters.generatedAdapter(StandardJsonAdapters.java:236)
乍一看,我的理解是编译器认为我没有为我的 Catalogs 类定义适配器,但我认为应该使用 @JsonClass(generateradapter = true)
注解。有什么我想念的吗?为什么我的程序不能为我的 Catalogs 类生成适配器?
最佳答案
所以我得到了工作。我所要做的就是通过在终端中运行 gradle build 来重建项目(我最初是在 IntelliJ 中运行它,但这似乎并没有真正运行构建)。关键问题是由于构建没有运行,我的 gradle 构建脚本中的行说,
kapt "com.squareup.moshi:moshi-kotlin-codegen:$moshi_version"
没有运行。这一行基本上让编译器能够理解代码中的注释,如@JsonClass。没有这一行,编译器将无法理解注解。这是我的问题的根本原因。我会保留这篇文章,以防有人遇到同样的问题。
关于kotlin - Moshi Retrofit2 Kotlin 类未找到异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50916988/
假设我们有这个 JSON: [ { "__typename": "Car", "id": "123", "name": "Toyota Prius", "numDo
此场景发生在使用 Retrofit2 和 Moshi 进行 JSON 反序列化的 Android 应用中。 如果您无法控制服务器的实现,并且该服务器在响应请求的方式上有不一致的行为(也称为“坏情况”)
我正在尝试使用 Android 的 Moshi 库将 Java 对象转换为 JSON。该对象包含一个类型的属性 ArrayList 我正在注册以下适配器来转换对象。 Type type = Type
我有一个响应对象: data class ResponseObject( val notCamelcase: String, val param2: String,
使用 Moshi,您可以为类的字段自定义名称 @Json(name = "your name") string name 但是您可以拥有多个自定义名称吗? @Json(name = "your nam
我有这个模型类 data class RvRange(val low: Int?, val high: Int?) 我的 JSON 响应是 {"low":60799.999999999985,"hig
我有一些看起来像这样的 JSON: { "name" : "Credit Card", "code" : "AUD", "value" : 1000 } 并使用 Moshi 将
我不知道如何在 kotlin 中执行此操作。我想将此字符串转换为对象数组: [ {mode=bus, line=381, line_name=381, direction=Waterloo, oper
我可以从服务器获取以下 JSON 数据: { "id": 1, "groupName": "MyBestFriends" } 在我的 Android 项目中,我使用 Moshi 来处理
我的一些成功的服务器响应是: { "error": null, "data": null } 我的模型是: public class BaseResponse { @Json(name = "
有没有办法设置 Moshi adapter自动创建一个 Object或 List基于 JSON 响应?目前,我可以明确地做到这一点。例如,我可以收到以下响应: { "userId": "1",
假设有以下代表服务器响应的参数化数据类: public class SocketResponse { private String responseMessage; private i
我正在尝试使用 reddit JSON API。有些帖子数据对象包含一个名为 edited 的字段,如果帖子未被编辑,该字段可能包含 bool 值 false,如果帖子被编辑,则可能包含时间戳 int
在我的 Android 应用程序中,在发送了一些注册凭据后,我从服务器获得了以下 JSON 输出: { "response":"successfully registered new user", "
我们有一个多态行为,为了满足它的反序列化,我们为它编写了一个自定义的 Moshi 适配器。 @JsonClass(generateAdapter = true) open class Field @J
我从 OrientDB 服务器收到一些 JSON,看起来像这样: { ... "out": ..., "in": ..., ... } 现在这两个字段out和 in可以
使用 Moshi 序列化数据时,有没有办法自动将命名约定应用于 Moshi? 例如 我有这个类,它遵循 Kotlin 属性命名约定(驼峰式大小写) class Player { var cur
我正在寻找 PolymorphicAdapter但是我能找到的所有多态示例都有一个名为“type”的键或类似的东西,可以用来区分要使用的类。但是就我而言,我没有这样的 key 。我对如何解析这样一个奇
我正在尝试运行使用okhttp3进行Rest api调用的示例代码。 MoshiJsonConvertor.kt: import com.squareup.moshi.JsonClass import
我需要解析一个包含属性“触发器”的对象,它是一个 List .此列表可以包含 2 种类型的触发器:自定义和事件。 这是我的触发器类: @JsonClass(generateAdapter = tr
我是一名优秀的程序员,十分优秀!