标签: data-class

使用 spring/jackson 将 Kotlin 数据类转换为 JSON

我试图将一些数据类公开为 JSON 对象,但有些东西不起作用。

我有以下数据类:

data class Link(
        @JsonProperty("rel")
        @JsonView(View.Bind::class)
        val rel: String,

        @JsonProperty("method")
        @JsonView(View.Bind::class)
        val method: HttpMethod,

        @JsonProperty("href")
        @JsonView(View.Bind::class)
        val href: String)


data class MetaData(val status: HttpStatus) {
    @JsonView(View.Bind::class)
    @JsonProperty("status_code")
    fun getStatusCode(): Int {
        return status.value()
    }

    @JsonView(View.Bind::class)
    @JsonProperty("status_desc")
    fun getStatusDesc(): String {
        return status.name
    }
}

data class Payload(
        @JsonView(View.Bind::class)
        @JsonProperty("payload")
        val payload: Any,

        @JsonProperty("_meta")
        @JsonView(View.Bind::class)
        val metaData: MetaData,

        @JsonProperty("_links")
        @JsonView(View.Bind::class)
        val links: List<Link>)
Run Code Online (Sandbox Code Playgroud)

出于某种原因,当 Payload 类是 JAVA 类时,一切正常,但当它是 kotlin 类时,只有有效负载元素进入 JSON。

对于依赖,我正在使用:

<dependency>
    <groupId>org.jetbrains.kotlin</groupId>
    <artifactId>kotlin-stdlib</artifactId>
    <version>1.0.1-1</version>
</dependency>

<dependency> …
Run Code Online (Sandbox Code Playgroud)

json spring-mvc jackson kotlin data-class

5
推荐指数
1
解决办法
8681
查看次数

Kotlin:需要 proguard Kotlin 数据类?

我有一个数据类定义如下

package com.mypackage.model

object Model {
    data class News(val photo: String, val title: String, val description: String)
}
Run Code Online (Sandbox Code Playgroud)

当我使用Proguard(即发布版本)编译它时,我收到并存储在模型中的数据全部变为空。它们仍然在那里,即 ArrayList listOfNews 确实具有预期的检索大小。然而它们的所有内容都是空的。

调试构建这是可以的。为了解决这个问题,我使用了这个混淆规则,它解决了这个问题。

-keep class com.mypackage.model.** { *; }
Run Code Online (Sandbox Code Playgroud)

这是预期的吗?即所有数据类都应该受到保护?

proguard kotlin android-proguard data-class

5
推荐指数
1
解决办法
3068
查看次数

将 POJO 转换为数据类 Kotlin

最近我开始将我的 Android 项目从 Java 转换为 Kotlin。我在许多类中使用 Retrofit 从 API 获取数据。在我的项目中,有很多 POJO,我需要手动将它们转换为数据类,因为它与 Android Studio 的自动转换工具不能很好地配合。

考虑我有模型类:

public class LoginResponseMinimal {

String firstName, lastName, token;

public String getFirstName() {
    return firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}

public String getLastName() {
    return lastName;
}

public void setLastName(String lastName) {
    this.lastName = lastName;
}

public String getToken() {
    return token;
}

public void setToken(String token) {
    this.token = token;
 }
}
Run Code Online (Sandbox Code Playgroud)

有什么好方法可以直接将这个模型类转换为 Kotlin 中的数据类吗?这个类手动转换是可以的,但是我有一些类有大量变量,手动将其转换为数据类会很麻烦。

android pojo kotlin data-class

5
推荐指数
1
解决办法
7863
查看次数

将Firebase数据快照反序列化为Kotlin数据类

嗨我有一个Kotlin数据类如下

data class User (
        @get:Exclude val gUser: Boolean,
        @get:Exclude val uid: String,
        @get:PropertyName("display_name") val displayName: String,
        @get:PropertyName("email") val email: String,
        @get:PropertyName("account_picture_url") val accountPicUrl: String,
        @get:PropertyName("provider") val provider: String
)
Run Code Online (Sandbox Code Playgroud)

我能够没有问题地序列化对象.但是在执行firebase查询时,我无法反序列化对象.目前这是我正在做的获取数据

_firebaseReference.child(getString(R.string.firebase_users_key)).child(user.uid)
        .setValue(user).addOnCompleteListener{
    _firebaseReference.child("users").child(user.uid)
            .addListenerForSingleValueEvent(object : ValueEventListener {
        override fun onCancelled(p0: DatabaseError) {

        }

        override fun onDataChange(p0: DataSnapshot) {
            if (p0.exists()) {
                val userHash = p0.value as HashMap<*, *>
                var currentUser: User
                if (userHash[getString(R.string.provider_key)]
                        != getString(R.string.provider_google)) {
                    currentUser = User(false, p0.key!!, 
                            userHash["display_name"].toString(), 
                            userHash["email"].toString(),
                            userHash["account_picture_url"].toString(), 
                            userHash["provider"].toString())
                } else {
                    currentUser = …
Run Code Online (Sandbox Code Playgroud)

serialization android kotlin firebase data-class

5
推荐指数
1
解决办法
2840
查看次数

如何在android中将Kotlin的数据类列表导出为CSV?

我能够找到将 Java 的 POJO 列表导出到 csv 的方法,但找不到将 Kotlin 的数据类列表导出到 CSV 的方法。

csv android kotlin data-class

5
推荐指数
1
解决办法
2735
查看次数

如何在包中将数据类作为 Parcelable 传递?

我有一个像这样的密封类:

sealed class SealedClass {

    object Object1 : SealedClass()
    object Object2 : SealedClass()
    object Object3 : SealedClass()

    data class DataClass(val sealedClass: SealedClass, val anotherDataType: AnotherDataType? = null)
}
Run Code Online (Sandbox Code Playgroud)

我想在 Bundle 中传递我的数据类,就像我们通常将值传递给一个新片段一样,如下所示:

@JvmStatic
fun newInstance(dataClass: DataClass): Fragment {
    val fragment = Fragment()

    val args = Bundle(1)
    args.putParcelable("DATA_CLASS", dataClass)
    fragment.arguments = args

    return fragment
}
Run Code Online (Sandbox Code Playgroud)

我不知道该怎么做。到目前为止,我读到的是人们使用@Parcelize注释,这是我试图避免的 Kotlin 的一个实验性功能。另一种方法是通过 Parcelable 扩展数据类并实现 Parcelable 方法,但由于我使用自定义类作为 DataClass 中的参数(例如 SealedClass),我不知道如何在 Parcelable 实现中读取/写入这些值。这不是一个正确的方法吗?

android kotlin data-class sealed-class

5
推荐指数
3
解决办法
5583
查看次数

Kotlin 接口中的 Gson SerializedName

有没有办法在 Kotlin 接口中使用 gson SerializedName 注释?

interface User {
   @SerializedName("user_id")
   val userId: String?
}

data class MainUser(override val userId: String? = null) : User
Run Code Online (Sandbox Code Playgroud)

我知道注释可以在子类中,但这不是我要找的,因为有很多类扩展了该接口。

注 1: 使用抽象类或开放类作为数据类的父类可以解决这个问题,但新问题是父类中覆盖的 equals() 方法永远不会被调用(mainUser1 == mainUser2 从不检查 equls() 方法抽象或开放类用户)

serialization interface gson kotlin data-class

5
推荐指数
1
解决办法
786
查看次数

更改列表项类中的属性值时,Jetpack compose mutableStateOf 列表不会触发重新组合

我认为我在这里缺少 Jetpack Compose 的核心概念。non-constructor data class property当我尝试更改可组合项的内部且此可组合项是观察列表的一部分时,我遇到了问题。

不起作用:(sadProperty未在构造函数中声明)

data class IntWrapper(val actualInt: Int = 0) {
var sadProperty: Int = 0
}

@Preview
@Composable
fun test() {
var state by remember { mutableStateOf(listOf(IntWrapper(1), IntWrapper(2), IntWrapper(3),IntWrapper(4)))}

    fun onClick(item: IntWrapper) {
        val indexOf = state.indexOf(item)
        val newState = state.minus(item).toMutableList()
        val copy = item.copy()
        copy.sadProperty = Random.nextInt()
        newState.add(indexOf, copy)
        state = newState
    }
    
    Column() {
        for (item in state) {
            Text("ac: ${item.actualInt} sad: ${item.sadProperty}", modifier = Modifier.clickable { onClick(item)}) …
Run Code Online (Sandbox Code Playgroud)

android kotlin data-class android-jetpack-compose compose-recomposition

5
推荐指数
1
解决办法
1911
查看次数

Kotlin数据类复制功能不起作用

也许我误解copydata类的功能是如何工作的,或者可能存在错误,但以下是copy函数不能按预期工作的示例:

科特林:

data class A {
    public var x: String? = null
    public var y: String? = null
    public var z: B = B.ONE
}

enum class B {
    ONE
    TWO
    THREE
}
Run Code Online (Sandbox Code Playgroud)

Java的

A a1 = new A()
a1.setX("Hello")
a1.setY("World")
a1.setZ(B.TWO)

A a2 = a1.copy()
// a2.x is null
// a2.y is null
// a2.z is B.ONE
Run Code Online (Sandbox Code Playgroud)

它似乎copy只是创建一个新的实例A而不是复制值.如果我将变量放在构造函数中,则会分配值,但这与构造新实例没有什么不同.

java kotlin data-class

4
推荐指数
1
解决办法
5128
查看次数

Kotlin - 如何从数据类列表中更新特定值

我有一个 Worker 数据类,

data class Worker(val id: Int, val name:String, val gender :String, val age :Int, val tel:String,val email:String)
Run Code Online (Sandbox Code Playgroud)

和工人名单

List<Worker> = listOf(workerA, workerB)
Run Code Online (Sandbox Code Playgroud)

我想写一个函数来更新Worker的数据,例如:

updateWorkerData(1, age, 28)

//'type' refer to name, gender, age ..
//'value' refer AA, Female, 27 ..
fun updateWorkerData(id: Int, type: Any, value: Any) {
  val workers = getListOfWorker()
  workers.forEach {
  if (it.id == id) {
   //here is where I stuck    
  }    
}
}
Run Code Online (Sandbox Code Playgroud)

我被困在如何将类型引用到数据类 Worker 中的值上。需要一些有关如何更新工人数据的指南。谢谢。

android kotlin data-class

4
推荐指数
2
解决办法
1万
查看次数