在基础构造函数中使用的子类val

我正在生产一个相当于现有python库的kotlin库。 用另一种语言编写等同代码可能是一个挑战。 具体来说,我有一个基类构造方法的情况下,它使用一个值,可以在基类中重写。 面临的挑战是,在子类中的val重载没有在基类构造函数之前应用的值。 在python中,子类构造函数中的某些代码可以在调用基类构造函数之前执行,但是在kotlin中,基类构造函数的所有代码首先执行。 但考虑这个kotlin代码: open class Base{ val simple = 3 open val open = 3 open val openGet = 3 open val getter get()= 3 open val getOpen get()= 3 open val getDelg by GetDelg(3) init { println(“base simple $simple open $open openG $openGet “+ “getOpen $getOpen getter $getter “+ ” getDelg […]

将回调代码迁移到暂停function

我正在使用协程将我的Android代码从Java重新分解到Kotlin,但是我没有find一种简单的方法来将基于回调的代码重写为挂起的函数。 一个基本的例子是一个警告popup框,返回一个结果,在Javascript中它将是这样的: let value = prompt(“please insert a value”) console.log(“Value:”+value) 我会在Kotlin翻译如下: class MainActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { //Standard activity initialization super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) //Actual code… launch { val value = resolvable(UI) { success, error -> //Build a simple popup prompt with AlertDialog val input = EditText(this@MainActivity) val builder = AlertDialog.Builder(this@MainActivity) .setTitle(“please insert […]

java.lang.RuntimeException:java.lang.RuntimeException:com.android.builder.dexing.DexArchiveMergerException:无法合并dex

我的项目是在Android Studio 3.0.1上的Kotlin,这是我的设计gradle buildscript { ext.kotlin_version = ‘1.2.0’ ext.anko_version=’0.10.3′ repositories { jcenter() mavenCentral() google() } dependencies { classpath ‘com.android.tools.build:gradle:3.0.1’ classpath ‘com.google.gms:google-services:3.1.1’ classpath “org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version” // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { google() jcenter() mavenCentral() } } task clean(type: Delete) […]

Android:与Butterknife的Kotlin

我正在尝试将Kotlin与Butterknife一起用于我的Android应用程序。 这是我的build.gradle dependencies { … compile ‘com.jakewharton:butterknife:8.0.1’ kapt ‘com.jakewharton:butterknife-compiler:8.0.1’ } kapt { generateStubs = true } 我也有一个EditText,我想用ButterKnife在更改时显示一条消息: @OnTextChanged(R.id.input) fun test() { toast(1) } 但是,没有任何反应。 我把一个断点放入函数中 – 甚至没有执行。 PS:我听说过kotterknife,但是我已经看到了纯粹的Butterknife的例子 。 我究竟做错了什么?

无法在Android Studio中分析Android应用程序

我试图在Android Studio 3.0.1中剖析我的应用程序,但我看不到哪些方法正在使用CPU,下面包含调用图和火焰图的列表总是空的,我正在使用SDK 26进行编译,请检查截图(一些我的课程是在Java和一些在Kotlin):

宏在工具支持

Comment from discussion abreslav’s comment from discussion "Kotlin Team AMA: Ask Us Anything". 传统的宏很难在工具中得到很好的支持 在Java中,我们已经有了Lombok @Data生成方法,几乎​​和宏一样。 https://projectlombok.org/features/Data 为什么宏在工具上很难支持?

使用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吗?

如何删除SQLite中的行与多个使用Anko的参数?

我希望通过_id删除一行,我也希望通过使用Anko的args删除多行。 我已阅读https://github.com/Kotlin/anko/wiki/Anko-SQLite#updating-values的文章,但我没有结果,你能帮我吗?

想法找不到课程导入

我使用File -> New -> Project from Existing Sources -> Create project from existing sources打开gradle项目。 (由于某些情况,我无法将其作为gradle项目导入)。 该项目是一个gradle插件。 build.gradle看起来像这样 apply plugin: “kotlin” buildscript { repositories { jcenter() maven { url “https://dl.bintray.com/kotlin/kotlin-dev/” } } dependencies { classpath “org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version” } } group = ‘com.lapots.gradle.plugins.appenv’ repositories { mavenCentral() maven { url “https://dl.bintray.com/kotlin/kotlin-dev/” } } dependencies { compile “org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version” compile gradleApi() […]

在android中无法使用dismiss方法解除Progress对话框

class CShowProgress(context: Context) { var s_m_oCShowProgress: CShowProgress? = null lateinit var m_Dialog: Dialog private var m_ProgressBar: ProgressBar? = null private var progressText: TextView? = null fun getInstance(): CShowProgress { if (s_m_oCShowProgress == null) { s_m_oCShowProgress = CShowProgress(context!!) } return s_m_oCShowProgress as CShowProgress } fun show(m_Context: Context, message: String) { m_Dialog = Dialog(m_Context) m_Dialog.requestWindowFeature(Window.FEATURE_NO_TITLE) m_Dialog.setContentView(R.layout.progress_bar) m_ProgressBar […]