Я новичок в разработке kotlin-android.
Я хочу разобрать JSON как
{
"name": "This is my name",
}
до Foo
класса, определенного как
Foo.kt
@JsonClass(generateAdapter = true)
data class Foo(val name: String)
Этот файл класса Foo
генерирует код по codegen следующим образом.
FooJsonAdapter.kt (генерируется codegen)
class FooJsonAdapter(moshi: Moshi) : JsonAdapter<Foo>() {
private val options: JsonReader.Options
private val stringAdapter: JsonAdapter<String>
override fun toString(): String
override fun fromJson(reader: JsonReader): Foo
override fun toJson(writer: JsonWriter, value: Foo?)
}
Конструктор класса FooJsonAdapter
определяет объект Moshi
, и вот мой вопрос.
Какой тип Moshi
объекта должен быть передан в конструктор? Я попробовал следующее, но это не работает.
MainActivity.kt
Moshi.Builder().add(
FooJsonAdapter(
Moshi.Builder().build()
)
).build()
Сообщение об ошибке
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.hoge, PID: 31816
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.hoge/com.example.hoge.MainActivity}: java.lang.IllegalArgumentException: Expected at least one @ToJson or @FromJson method on com.example.hoge.FooJsonAdapter
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3260)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3396)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2009)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7319)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:934)
Caused by: java.lang.IllegalArgumentException: Expected at least one @ToJson or @FromJson method on com.example.hoge.FooJsonAdapter
at com.squareup.moshi.AdapterMethodsFactory.get(AdapterMethodsFactory.java:137)
at com.squareup.moshi.Moshi$Builder.add(Moshi.java:237)
at com.example.hoge.MainActivity.onCreate(MainActivity.kt:14)
at android.app.Activity.performCreate(Activity.java:7783)
at android.app.Activity.performCreate(Activity.java:7772)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3235)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3396)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2009)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7319)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:934)
Что мне делать? Thx!