Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Call a java class from a kotlin activity

I am working on a project on Android Studio. I have the main activity inside a kotlin file (MainActivity.kt) and from it I am trying to call a static method(start_netClient()) from inside a java file (dists.java) via an Intent object by putting this listener for my bbutton inside the onCreate() of the MainActivity :

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

The Net_Activity and its content:

class Net_Activity: AppCompatActivity() {

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

What I get for this code during the build is this error on Intent on the 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

I am relatively new to the whole Android thing, but what is it that I am missing, and how is it possible to connect a java method and a kotlin class via the Intent? Is it best effort to use two Activities or is there a different approach?

like image 335
Efthimis_28 Avatar asked Sep 02 '25 11:09

Efthimis_28


1 Answers

It seems that when you use this, you're referencing the listener object (View.OnClickListener) rather than your activity. You should be able to fix this by using this@Net_Activity, which references your activity instead of the listener. The full line should look like so:

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

When you declare an object in Kotlin (via the object keyword) you're defining an anonymous class, and then creating a single instance of this class. This allows you to override methods for things like listeners, but as you've discovered, it means you have to double check your uses of this.

like image 163
apetranzilla Avatar answered Sep 03 '25 23:09

apetranzilla