【问题标题】:Call a java class from a kotlin activity从 kotlin 活动中调用 java 类
【发布时间】:2018-11-19 15:19:31
【问题描述】:

我正在 Android Studio 上开发一个项目。我在 kotlin 文件(MainActivity.kt)中有主要活动,我试图通过 Intent 对象从 java 文件(dists.java)中调用静态方法(start_netClient()),方法是将此侦听器放在我的bbutton 在 MainActivity 的 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_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 类?是尽量使用两个活动还是有不同的方法?

【问题讨论】:

  • 你想在Net_Activity 中完成什么?为什么会有main(args: Array&lt;String&gt;)这个功能?
  • 我正在尝试从 dists 类调用 start_netClient() 方法,这是一个 java 类。
  • 嗯,你确定这就是Net_Activity中的所有内容吗?
  • 我在 Activity 声明上方有导入,我已将其插入到 AndroidManifest 中,但一切都很清楚。我应该在其中包含与 Intent 构造错误匹配的内容吗?

标签: java android android-studio kotlin


【解决方案1】:

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

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

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

【讨论】:

  • 我将这一行添加为:val intent = Intent(this@MainActivity, Net_Activity::class.java)。你提示的方式我得到了一个未解决的 Net_Activity 参考。 (intent val 的声明在 MainActivity 内部,而不是 Net_Activity。)这种思维方式是否正确,因为 Net_Activity 是 kotlin 活动而不是 java 类?
  • 啊,我以为你的代码在Net_Activity 内——应该是正确的。
猜你喜欢
  • 2020-04-06
  • 2016-12-17
  • 2020-08-17
  • 1970-01-01
  • 2011-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多