从kotlin活动中调用java类

时间:2018-06-10 00:39:47

标签: java android android-studio kotlin

我正在开发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)
        }
    })

Net_Activity及其内容:

class Net_Activity: AppCompatActivity() {

fun main(args: Array<String>) {
    dists.start_netClient()
}
}

在构建过程中我得到的代码是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

我对整个Android事物都比较新,但是我缺少的是什么,以及如何通过Intent连接java方法和kotlin类?是最好的努力使用两个活动还是有不同的方法?

2 个答案:

答案 0 :(得分:2)

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

val intent = Intent(this@Net_Activity, Net_Activity::class.java)

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

答案 1 :(得分:-1)

尝试再次阅读从Android开发人员文档创建Activity的基础知识。 Read here

Kotlin旨在与Java 100%互操作。这意味着您可以从Kotlin调用任何Java类或方法,反之亦然。因此,您甚至可以将基于Kotlin的Activity与基于Java的活动一起制作,这对您有好处。虽然我建议你只使用100%Kotlin,因为它更容易开发和阅读。

试试这个:

  1. 将您的Net_Activity更改为NetActivity。这对眼睛来说要好得多。不要忘记更改AndroidManifest.xml

  2. setOnClickListener更改为

    bButton.setOnClickListener {
        // Handler code here.
       val intent = Intent(this, NetActivity::class.java)
       startActivity(intent)
    }
    
  3. 您的main中的NetActivity功能是否像public static void main(String[] args)一样?这不是你怎么做的。您可以覆盖其他Activity方法,例如onCreate()onResume()等。尝试再次阅读应用基础知识。