无法在Kotlin中构建发布版本

在将我的Android项目转换为Kotlin后,我无法构建发布版本,错误似乎与Proguard有关。 我看到155个警告 Warning:com.example.app.activity.MainActivity$1: can’t find referenced field ‘android.view.View decorView’ in program class com.example.app.activity.MainActivity Warning:com.example.app.activity.MainActivity$2: can’t find referenced field ‘android.os.Handler handler’ in program class com.example.app.activity.MainActivity 并且构建失败 Error:Execution failed for task ‘:MyApp:transformClassesAndResourcesWithProguardForFreeRelease’. > Job failed, see logs for details 如果我在build.grade中将这些指令从true更改为false,则构建成功。 minifyEnabled true shrinkResources true 有什么问题可能是什么建议? 编辑: proguard文件如下: ProGuard的-android.txt # This is a configuration file for ProGuard. # […]

当listview刷新时,从第一行开始(Kotlin)

我需要在kotlin中使用listview的帮助。 我有一个计时器function,每隔1分钟从服务器(在这种情况下,firebase)获取更新的列表视图数据。 在firebase完成获取数据后,我申请: listview.adapter = CustomAdapter(applicationContext) 但问题是,当我可能滚动到第50行时,列表视图刷新并进入第1行。这是超级讨厌的,因为我有大约一百行。 任何机构都有解决办法?

Kotlin-Exposed在他们的wiki上的例子是行不通的

这段代码被直接从Kotlin-Exposed Wiki中删除,但不起作用。 奇怪和沮丧,我不能得到它的工作,因为我有一个很酷的项目,需要使用RDBMS的想法。 我错过了什么? 它坏了吗? import org.jetbrains.exposed.sql.StdOutSqlLogger import org.jetbrains.exposed.sql.Database import org.jetbrains.exposed.sql.Table import org.jetbrains.exposed.sql.insert import org.jetbrains.exposed.sql.transactions.transaction import org.jetbrains.exposed.sql.selectAll fun main(args: Array) { Database.connect(“jdbc:h2:mem:test”, driver = “org.h2.Driver”) transaction { logger.addLogger(StdOutSqlLogger) val stPeteId = Cities.insert { it[name] = “St. Petersburg” } get Cities.id println(“Cities: ${Cities.selectAll()}”) } } // Table definition object Cities : Table() { val id = […]

为什么在Kotlin中隐式地使用了null + nulltypes的字符串?

以下Kotlin代码: val x = null + null 结果x是Stringtypes的,根据String.plus的文档是正确的: 将此字符串与给定[other]对象的字符串表示forms连接起来。 如果接收者或[other]对象为空,则表示为字符串“null”。 但是,我不明白为什么会发生这种情况 – 是由于语言的某些特殊function?

Android上的Kotlin:将光标映射到列表

在Kotlin中,遍历Android Cursor对象并将结果放入列表中的最佳方法是什么? 我的自动转换的Java: val list = ArrayList() while (c.moveToNext()) { list.add(getStringFromCursor(c)) } 有没有更习惯的方式? 特别是,它可以在只读列表中进行一次分配吗? 例如… val list = /*mystery*/.map(getStringFromCursor) …或其他安排,其中列表分配完整。

如何解释kotlin的@Metadata注释内容?

我知道kotlin为每个编译的类生成@Metadata注释。 我也看到了这种types的评论: 此批注存在于Kotlin编译器生成的任何类文件中,并由编译器和reflection读取。 问题是编译器如何使用它(假设它是编译的结果)? 我会请求解释注释的内容。 例如,这一个: @Metadata( mv = {1, 1, 9}, bv = {1, 0, 2}, k = 1, d1 = {“\u0000\f\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0003\u0018\u0000 \u00032\u00020\u0001:\u0001\u0003B\u0005¢\u0006\u0002\u0010\u0002¨\u0006\u0004”}, d2 = {“LMain;”, “”, “()V”, “Companion”, “production sources for module kotlin-examples”} ) 提前致谢!

RealmMigrationNeededException添加RealmList (Kotlin)

我想添加一个原始列表到现有的模型,但我得到一个exception。 注意:这一切都是Kotlin完成的。 这里是模型: open class Foo( @PrimaryKey var id: Int = 0 ) : RealmObject() 现在我想添加下面的字段: var idList: RealmList = RealmList() 这可能是一个空列表,所以我用一个空白的RealmList (它用于非原始列表字段)初始化它。 我的迁移看起来像这样: schema.get(“Foo”) ?.addRealmListField(“idList”, Int::class.java) 运行应用程序时,我得到一个RealmMigrationNeededException : 由于以下错误,迁移是必需的: – 属性’Foo.idList’已经被选中。 我可以通过添加@Required到模型中的新字段来解决这个问题,但我不确定列表是否仍然可以为空/空。 将原始列表添加到模型的正确方法是什么?以及这是什么正确的迁移?

Kotlin文件读取,使用块没有捕获所有的例外

我正在用Kotlin做一些文件IO,并想使用库中提供的那些很棒的扩展方法 val cacheDir = externalCacheDir File(cacheDir, “missingfile.dat”) .inputStream() .use { //Use the file in someway } 所以当这个文件存在的时候这个效果很好,但是如果文件丢失了,我会得到一个FileNotFoundException 。 这是预料之中的。 但是,如果我想正确地处理它,我最终打破了令人敬畏的Kotlin语法包装在另一个尝试捕获 所以我挖了一下代码,看着inputStream()调用 我看到这个 public inline fun File.inputStream(): FileInputStream { return FileInputStream(this) } 所以我想我会做我自己的扩展function,这样做。 在尝试中的包裹,至少在使用它时不可见 fun File.inputStreamOrNull(): FileInputStream? { return try { FileInputStream(this) } catch (e: Exception) { null } } 但是,在use块内引发空指针exception val cacheDir = externalCacheDir File(cacheDir, […]

Kotlin构建时不会发生Android API版本检查

如何让Kotlin在编码时给出API级错误,而不是在运行时。 应用程序Gradle文件: minSdkVersion 19 targetSdkVersion 26 科特林代码: //initialisation var data = getSomedata() //the returned type is Map data.getOrDefault(“SomeKey”,”DefaultValue”) 问题: 代码编译良好,也能够创建签名的APK。 但是,当在具有API 22(Android 5)的设备上执行APK时,会引发以下错误。 致命exception:java.lang.NoSuchMethodError 预期beheviour: 如果我在java文件中调用函数,甚至在编译之前,lint检查会给出以下错误。 调用需要API级别24(当前最小值为19):java.util.Map#getOrDefault 检查重复 已经检查过这个问题 。 这是为我已经得出的行为提供理由。 我需要解决方法或解决。 到目前为止,我不确定哪些所有的方法在运行时都不起作用,用户会报告那些IDE或编译器应该报告的错误。

Kotlin中所需的运算符关键字是什么时候?

在第14次操作符重载的Kotlin Koan中 ,我惊讶地发现解决方案后,我看到了答案,并且看到compareTo方法不需要operator修饰符: data class MyDate(val year: Int, val month: Int, val dayOfMonth: Int) : Comparable { override fun compareTo(other: MyDate) = when { year != other.year -> year – other.year month != other.month -> month – other.month else -> dayOfMonth – other.dayOfMonth } } 运营商重载的文档中明确指出: 超载操作符需要用运算符修饰符标记。 那么这里发生了什么? 为什么这个代码编译? 何时需要operator ?