从kotlin活动调用java类

从kotlin活动调用java类,java,android,android-studio,kotlin,Java,Android,Android Studio,Kotlin,我正在Android Studio上做一个项目。我在一个kotlin文件(MainActivity.kt)中有一个main活动,我试图通过一个Intent对象从一个java文件(dists.java)中调用一个静态方法(start_netClient()),方法是将我的bbutton的侦听器放在main活动的onCreate()中: bbutton.setOnClickListener(object: View.OnClickListener { override

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

        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_活动及其内容:

class Net_Activity: AppCompatActivity() {

fun main(args: Array<String>) {
    dists.start_netClient()
}
}
类网络活动:AppCompatActivity(){
趣味主线(args:Array){
dists.start_netClient()
}
}
在构建过程中,我得到的代码是MainActivity.kt上的意图错误:

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
Error:(65,30)使用提供的参数无法调用以下函数:
在android.content.Intent中定义的公共构造函数Intent(p0:Context!,p1:Class!)
在android.content.Intent中定义的公共构造函数Intent(p0:String!,p1:Uri!)

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

请尝试再次阅读Android开发者文档中创建活动的基本内容

Kotlin被设计成与Java 100%互操作。这意味着您可以从Kotlin调用任何Java类或方法,反之亦然。因此,您甚至可以将基于Kotlin的活动与基于Java的活动结合起来,这将对您有好处。尽管我建议您只使用100%Kotlin,因为它更易于开发和阅读

试试这个:

  • 将您的
    Net\u活动
    更改为
    NetActivity
    。这对眼睛有好处。不要忘记更改您的
    AndroidManifest.xml

  • 将您的
    设置ClickListener
    更改为

    bButton.setOnClickListener {
        // Handler code here.
       val intent = Intent(this, NetActivity::class.java)
       startActivity(intent)
    }
    
  • 您的
    NetActivity
    中是否有
    main
    功能,就像
    publicstaticvoidmain(String[]args)
    ?这不是你怎么做的。您可以覆盖其他
    活动
    方法,如
    onCreate()
    onResume()
    等。请再次尝试阅读应用程序基础知识


  • 似乎当您使用
    this
    时,您引用的是侦听器对象(
    View.OnClickListener
    ),而不是您的活动。您应该能够通过使用
    this@Net_Activity
    ,它引用您的活动而不是侦听器。整行应该是这样的:

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

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

    的使用情况,您在
    网络活动中试图实现什么?为什么它有函数
    main(args:Array)
    ?我试图从dists类调用start\u netClient()方法,这是一个java类。嗯,你确定这是
    Net\u活动中的所有内容吗,但这一切都很清楚。我是否应该在其中包含与Intent构造错误匹配的内容?我添加了一行:val Intent=Intent(this@MainActivity,Net_Activity::class.java)。按照您提示的方式,我获得了一个未解析的Net_活动引用。(意图val的声明在main活动中,而不是Net_活动中)这种思维方式正确吗,因为Net_活动是kotlin活动而不是java类?啊,我以为你的代码在
    Net_活动中
    -应该是正确的。