小编Noa*_*ein的帖子

如何在 Kotlin 中扩展枚举?

在我的 Kotlin 项目中,我有一个 DefaultError 枚举

enum class DefaultError {
    INTERNET_ERROR,
    BLUETOOTH_ERROR,
    TEMPERATURE_ERROR
}
Run Code Online (Sandbox Code Playgroud)

我想扩展它们,以便我有

enum class NfcAndDefaultError : DefaultError {
    //DefaultError inherited plus
    NFC_ERROR
}
Run Code Online (Sandbox Code Playgroud)

和另一个枚举

enum class KameraAndDefaultError : DefaultError {
    //DefaultError inherited plus
    CAM_ERROR
}
Run Code Online (Sandbox Code Playgroud)

我现在有

enum class NfcDefaultError {
    INTERNET_ERROR,
    BLUETOOTH_ERROR,
    TEMPERATURE_ERROR,
    NFC_ERROR
}
Run Code Online (Sandbox Code Playgroud)

enum class KameraAndDefaultError {
    INTERNET_ERROR,
    BLUETOOTH_ERROR,
    TEMPERATURE_ERROR,,
    CAM_ERROR
}
Run Code Online (Sandbox Code Playgroud)

我敢打赌 Kotlin 有很好的方法吗?

enums kotlin

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

X类不是抽象的,并且没有实现android.os.Parcelable中定义的有趣的writeToParcel()

在我的Android应用中,我想Place向我的Intent 添加一个Bundle,其中包括如下所述的对象。由于可序列化很慢并且不建议使用,因此我更喜欢使用Parcelable。

Althoug我使用Kotlin 1.3.31,在打包某些数据类时遇到问题。例:

import android.os.Parcelable
import kotlinx.android.parcel.Parcelize

@Parcelize
data class Place(val street: String, val postal: String, val city: String) : Parcelable
Run Code Online (Sandbox Code Playgroud)

和Android Studio抱怨:

类'Place'不是抽象的,并且没有实现抽象成员public abstract fun writeToParcel(p0:Parcel !, p1:Int):android.os.Parcelable中定义的单位

根据一些教程

而已!您不再需要编写任何包裹方法!

https://android.jlelse.eu/yet-another-awesome-kotlin-feature-parcelize-5439718ba220

而且我不想使用

androidExtensions {
    experimental = true
}
Run Code Online (Sandbox Code Playgroud)

生产中的东西。

我在这里有什么选择?

android parcelable android-bundle kotlin-android-extensions kotlinx.serialisation

9
推荐指数
1
解决办法
2344
查看次数

如何在 Kotlin 中创建数据类单例?

假设我有一个数据类:

data class SensorData(val name: String, val temp : Double)
Run Code Online (Sandbox Code Playgroud)

SensorData我通过 REST 服务或内部 setter 方法创建此对象,但它name始终已填充并且temp可能为空。

此外,我需要通过几个类来获取这个 SensorData 对象,这就是我想到使用singleton.

显然我需要此处描述的object关键字,但是如何组合?data class object

singleton kotlin data-class

6
推荐指数
1
解决办法
8389
查看次数

如何在 Kotlin 上测试数据类?

我的 Kotlin 项目中有数据类,用于 JSON Rest 响应。例如:

data class WeatherResponse(val city: String, val temperature: Double, val humidity: Double)
Run Code Online (Sandbox Code Playgroud)

为了满足代码覆盖限制,我想为上述数据类编写一些测试。

哪些单元测试对 Kotlin 数据类有意义?

我想创建一个 WeatherResponse 对象和一个相应的 JSON 字符串(来自服务器的响应),将该字符串解析为 WeatherResponse 对象并进行比较?

testing junit unit-testing kotlin data-class

6
推荐指数
1
解决办法
4320
查看次数

如何为 KTOR 添加日志拦截器?

当我使用 Retrofit 时,我可以轻松创建日志拦截器来查看 logcat 上带有正文和标头的调用:

 val loggingInterceptor = HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY)
            val httpClient = OkHttpClient.Builder()
                    .addInterceptor(loggingInterceptor)
Run Code Online (Sandbox Code Playgroud)

进而

 val retrofit = retrofit2.Retrofit.Builder()
                    .client(httpClient.build())
Run Code Online (Sandbox Code Playgroud)

现在,我们切换到 Ktor,我不知道我不知道如何

  • 使用addInterceptor()
  • 对于 [ install(CallLogging)][2] 没有任何反应..

有什么建议或例子吗?

[2] 来源:

fun Application.main() {
    install(CallLogging){
        level = Level.TRACE
    }
}
Run Code Online (Sandbox Code Playgroud)

logging kotlin ktor

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

如何导入本地 *jar 每个 gradle?

我包含了一个本地 *.jar 文件(库),如此处所述..

\n\n
    \n
  1. 单击工具栏中的“文件”
  2. \n
  3. 项目结构
  4. \n
  5. 在左侧面板中选择模块
  6. \n
  7. 依赖项选项卡
  8. \n
  9. \'+\' \xe2\x86\x92 JAR 或目录
  10. \n
\n\n

现在,我将 Android 项目提交到 github,并且该本地 jar 文件的先前设置似乎丢失了。

\n\n

每当同事签出该项目时,他们都没有其他 jar 文件的路径。

\n\n

问题:

\n\n
    \n
  1. 我可以在哪里在 gradle(或任何其他文件)中指定上面的这些步骤以链接到该 *.jar 文件?
  2. \n
  3. 另一种可能性是libs我的应用程序模块中的文件夹。与1相比有什么优点和缺点?
  4. \n
  5. 其他可能性还包括将 jar 添加到我的 git 中!?
  6. \n
\n

intellij-idea gradle android-build android-gradle-plugin

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

Moshi @Json 注释不适用于 com.github.kittinunf.fuel.moshi.moshiDeserializerOf?

我有一个响应对象:

data class ResponseObject(
        val notCamelcase: String,
        val param2: String,
        val param3: String
)
Run Code Online (Sandbox Code Playgroud)

notCamelCase请注意,响应 JSON 正文中的第一个参数不是驼峰式(例如)。

此外,我使用 FUEL 库触发 REST 调用:

Fuel.get(someParam)
        .responseObject(moshiDeserializerOf(ResponseObject::class.java)) { _, response, result ->
            try {
                if (response.statusCode == HttpURLConnection.HTTP_OK) {
                    val responseObject = result.component1()
        }
Run Code Online (Sandbox Code Playgroud)

以下是我的进口:

import com.github.kittinunf.fuel.Fuel
import com.github.kittinunf.fuel.core.FuelError
import com.github.kittinunf.fuel.core.FuelManager
import com.github.kittinunf.fuel.core.HttpException
import com.github.kittinunf.fuel.moshi.moshiDeserializerOf
Run Code Online (Sandbox Code Playgroud)

为了在下面的代码中使用驼峰命名法,我修改了 ResponseObject,如下所示:

data class ResponseObject(
        @Json(name="notCamelcase")
        val notCamelCase: String,
        val param2: String,
        val param3: String
)
Run Code Online (Sandbox Code Playgroud)

正如这里所描述的......

在本例中,notCamelCase为空。@Json 是否只能与 com.github.kittinunf.fuel.moshi.moshiDeserializerOf 一起使用?怎么了?

kotlin moshi kotlin-fuel

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