Tag: moshi

MutableLiveData:在Retrofit / Moshi中分配给ArrayList的问题

我正在用一个Retrofit HTTP调用来调试一个问题。 正在进行的调用是成功的,并且响应似乎与我的POJO(在这种情况下为Kotlin数据类)格式相同。 然而,在将我的POJO列表分配给Response>时似乎有一些脱节。 没有错误,而且我已经证实,答复实际上并不是错误的。 我在这里错过了什么? 你会如何去find我的MutableLiveData和我的响应之间的断开? 发生断开连接的ViewModel。 调用enqueueProjectAPICall()之后,尽管响应是项目列表,但_projects仍然为空: class ProjectBrowserViewModel(): ViewModel(){ private var projectCall: Call private val API_KEY = “whatever” //Mutable private data private val _projects = MutableLiveData<List>() private val _selectedField = MutableLiveData() //Exposed Data val projects: LiveData<List> get() = _projects val selectedField: LiveData get()=_selectedField init { projectCall = BehanceAPI.behanceService.projects(API_KEY) } fun loadProjectsFromField(fieldName: String){ […]

KotlinReflectionInternalError数据类

尝试在Retrofit服务中使用数据类作为结果types时收到以下错误。 11-15 11:35:38.345 14693-14693/com.example.app E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.app, PID: 14693 kotlin.reflect.jvm.internal.KotlinReflectionInternalError: Incorrect resolution sequence for Java constructor public constructor AuthenticationResponse() defined in com.example.app.data.auth.AuthenticationResponse[JavaClassConstructorDescriptor@6d57dc3] (kotlin.reflect.jvm.internal.impl.load.java.structure.reflect.ReflectJavaClass: class com.example.app.data.auth.AuthenticationResponse) at kotlin.reflect.jvm.internal.RuntimeTypeMapper.mapSignature(RuntimeTypeMapper.kt:202) at kotlin.reflect.jvm.internal.KFunctionImpl.(KFunctionImpl.kt:46) at kotlin.reflect.jvm.internal.KClassImpl$Data$constructors$2.invoke(KClassImpl.kt:87) at kotlin.reflect.jvm.internal.KClassImpl$Data$constructors$2.invoke(KClassImpl.kt:39) at kotlin.reflect.jvm.internal.ReflectProperties$LazySoftVal.invoke(ReflectProperties.java:93) at kotlin.reflect.jvm.internal.ReflectProperties$Val.getValue(ReflectProperties.java:32) at kotlin.reflect.jvm.internal.KClassImpl$Data.getConstructors(Unknown Source:7) at kotlin.reflect.jvm.internal.KClassImpl.getConstructors(KClassImpl.kt:192) at kotlin.reflect.full.KClasses.getPrimaryConstructor(KClasses.kt:40) at com.squareup.moshi.KotlinJsonAdapterFactory.create(KotlinJsonAdapter.kt:160) at com.squareup.moshi.Moshi.adapter(Moshi.java:100) at retrofit2.converter.moshi.MoshiConverterFactory.responseBodyConverter(MoshiConverterFactory.java:90) at retrofit2.Retrofit.nextResponseBodyConverter(Retrofit.java:328) […]

使用Moshi反序列化可以是两种数据types之一的字段

我从OrientDB服务器收到一些JSON,如下所示: { … “out”: …, “in”: …, … } 现在这两个字段可以是两种types之一: String和我自己的自定义对象(我们称之为一个Record )。 例如,对于一个请求我可能会收到: { … “out”: “#17:0”, “in”: { … }, … } 对于另一个我可能会得到: { … “out”: { … }, “in”: “#18:2”, … } 等等。 两者都可能是String ,都可能是Records ,一个可能是一个String ,另一个可能是一个Record ,等等。 现在,当我使用Moshi对这种JSON进行反序列化时,我有两个参数out和in来保存它们各自键的值; 然而,因为这些值不是固定的数据types,所以说起来容易做起来难。 创建多个POJO(或“POKO”,我猜是因为我正在使用Kotlin)不起作用,因为这些对象可以在其他 JSON对象内部find。 我需要一个单一的对象,这些参数可以采取一个可变的数据types。 那么我该怎么做呢? 我需要在Moshi中编写一个自定义适配器来序列化/反序列化这些值吗? 如果是这样,我将如何去写一个可以分配一个特定的数据types取决于参数的值? 或者是有某种types的Kotlin类/函数/扩展函数,我可以find/写入,可以容纳两种可能的数据types? 如果它是相关的,我也使用Retrofit 2 + RxJava 2异步地进行HTTP调用,所以如果这些库中有任何数据types或函数有助于这样的事情,那么我就是耳熟能详。 即使任何人只能用Java来回答,因为我可以自己转换代码。 […]

用翻新和moshi填充微调

我是Android开发人员(包括java或kotlin)的初学者。 我正在尝试用改造和moshi从json填充微调器,但我不知道如何将其填充到微调器中。 说实话,我不知道Json数据的返回是否正确,因为Log.d()返回不是作为dump()laravel或php的细节。 脚本在活动onCreate(请阅读脚本的评论,我把Log.d()调试结果) Log.d() val task = object : AsyncTask<Void, Void, Response<List>>() { override fun doInBackground(vararg params: Void): Response<List> { val typeAPI = RestAPI() val callResponse = typeAPI.getNews() val response = callResponse.execute() return response } override fun onPostExecute(response: Response<List>) { if (response.isSuccessful) { val news = response.body() Log.d(“test:”, news!![0].data.toString()) // method ‘java.lang.String com.example.mockie.tigaer.api.TypeDataResponse.toString()’ on […]

使用moshi转换HashMap

我试图将元素的HashMap转换为JSON字符串。 我正在使用此链接中使用的方法。 val elementsNew: HashMap = HashMap(elements) val type = Types.newParameterizedType(Map::class.java, String::class.java, Element::class.java) var json: String = builder.adapter(type).toJson(elementsNew) 但是,这给出了以下错误 错误:(236,40)types推断失败:没有足够的信息来推断有趣的适配器中的参数T(p0:Type!):JsonAdapter! 请明确指定。 任何人都可以告诉我哪里有错? 是因为Kotlin吗?

如何使用moshi创建复杂的json而不需要定义类?

在gson中,我可以使用JsonElement来格式化一个复杂的json,像(在kotlin中): val objIDonotWantToDefine = JsonObject() objIDonotWantToDefine.addProperty(“objName”, “objIDonotWantToDefine”) val playerJsonArray = JsonArray() for ((name, age) in players) { val player = JsonObject() player.addProperty(“name”, name) player.addProperty(“age”, age) playerJsonArray.add(player) } objIDonotWantToDefine.add(“players”, playerJsonArray) val jsonStringIWant = GsonBuilder().create().toJson(objIDonotWantToDefine) 我知道我可以使用JSONWriter在莫西做到这一点。 但有没有一个简单的方法来做到这一点?

连接moshi到Android Studio(Kotlin)

我在Android Studio中使用Kotlin。 我无法编译连接moshi库的项目。 https://github.com/square/moshi 告诉我,我做错了什么? 我可以在控制台中看到: :app:packageInstantRunResourcesDebug UP-TO-DATE :app:checkManifestChangesDebug :app:transformClassesWithAndroidGradleClassShrinkerForDebug com/squareup/moshi/JsonReader references unknown class: javax/annotation/Nullable com/squareup/moshi/CollectionJsonAdapter$1 references unknown class: javax/annotation/Nullable com/squareup/moshi/JsonAdapter$5 references unknown class: javax/annotation/Nullable com/squareup/moshi/package-info references unknown class: javax/annotation/ParametersAreNonnullByDefault com/squareup/moshi/ArrayJsonAdapter$1 references unknown class: javax/annotation/Nullable com/squareup/moshi/AdapterMethodsFactory$1 references unknown class: javax/annotation/Nullable okio/package-info references unknown class: javax/annotation/ParametersAreNonnullByDefault com/squareup/moshi/Types references unknown class: javax/annotation/Nullable com/squareup/moshi/JsonAdapter references unknown class: javax/annotation/Nullable […]

莫希忽视科特林的领域

在使用Moshi时,我想知道如何忽略Kotlin class字段。 我已经find了Java( Moshi忽略字段 )的这个答案,它表明如下使用关键字transient private transient String your_variable_name; 但是我找不到在Kotlin完成这个工作的正确方法。

POJO字段声明,设置为init值或null

在我的POJO中,我通常会声明这样的字段 class SampleModel { var field1: String? = null var field2: Int? = null <more fields here> } 如果我这样声明,我将需要检查该字段是否为空。 但如果这样的话: class SampleModel { var field1 = "" var field2 = 0 <more fields here> } 我可以直接使用它。 使用哪个声明有什么关系? 就记忆力,表现力而言,还是一个很好的做法? 可以说我有100个领域。 然后我使用Moshi或Gson作为解串器。

Gson或Moshi:在POJO领域可以有两种类型,如何保存到任何领域

编辑: 这是我有的JSON字符串: json#1 { [ { field1 : "" field2 : 0 field3 : "Amount not fixed" or field : 250 // this field can be string or int }, { field1 : "" field2 : 0 field3 : "Amount not fixed" or field : 250 // this field can be string or int } […]