从 kotlin 活动调用 java 类

Eft*_*_28 3 java android kotlin android-studio

我正在 Android Studio 上开发一个项目。我在 kotlin 文件 (MainActivity.kt) 中有主要活动,我试图通过 Intent 对象从 Java 文件 (dists.java) 内部调用静态方法 (start_netClient()),方法是将此侦听器放在我的MainActivity的 onCreate() 内的 bbutton :

        bbutton.setOnClickListener(object: View.OnClickListener {
        override fun onClick(view: View): Unit {
            // Handler code here.
            val intent = Intent(this, Net_Activity::class.java)
            startActivity(intent)
        }
    })
Run Code Online (Sandbox Code Playgroud)

Net_Activity 及其内容:

class Net_Activity: AppCompatActivity() {

fun main(args: Array<String>) {
    dists.start_netClient()
}
}
Run Code Online (Sandbox Code Playgroud)

我在构建过程中得到的这段代码是 MainActivity.kt 上 Intent 上的这个错误:

Error:(65, 30) None of the following functions can be called with the arguments supplied:
public constructor Intent(p0: Context!, p1: Class<*>!) defined in android.content.Intent
public constructor Intent(p0: String!, p1: Uri!) defined in android.content.Intent
Run Code Online (Sandbox Code Playgroud)

我对整个 Android 的东西比较陌生,但是我缺少什么,如何通过 Intent 连接 java 方法和 kotlin 类?使用两个活动是尽最大努力还是有不同的方法?

ape*_*lla 5

似乎当您使用 时this,您是在引用侦听器对象 ( View.OnClickListener) 而不是您的活动。您应该能够通过使用 来解决此问题this@Net_Activity,它引用您的活动而不是侦听器。整行应如下所示:

val intent = Intent(this@Net_Activity, Net_Activity::class.java)
Run Code Online (Sandbox Code Playgroud)

当您在 Kotlin 中(通过object关键字)声明一个对象时,您正在定义一个匿名类,然后创建此类的单个实例。这允许您覆盖诸如侦听器之类的方法,但正如您发现的那样,这意味着您必须仔细检查this.