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