Я работаю над проектом в Android Studio. У меня есть основная активность внутри файла kotlin (MainActivity.kt), и из него я пытаюсь вызвать статический метод (start_netClient ()) изнутри файла java (dists.java) через объект Intent, поместив этого слушателя для моего кнопка внутри onCreate () 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)
}
})
Net_Activity и его содержимое:
class Net_Activity: AppCompatActivity() {
fun main(args: Array<String>) {
dists.start_netClient()
}
}
Что я получаю для этого кода во время сборки, так это ошибка Intent на 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
Я относительно новичок во всем, что касается Android, но что мне не хватает, и как можно связать java-метод и класс kotlin через Intent? Лучше всего использовать два Activity или есть другой подход?
Я пытаюсь вызвать метод start_netClient () из класса dists, который является классом java.
И ммм, вы уверены, что это все содержимое Net_Activity?
У меня есть импорт над объявлением Activity, я вставил его в AndroidManifest, но все ясно. Есть ли что-то, что я должен был включить внутри, что соответствует ошибке конструкции Intent?




Попробуйте еще раз прочитать основы создания Activity из документации разработчика Android. Прочтите здесь
Kotlin разработан с учетом 100% совместимости с Java. Это означает, что вы можете просто вызвать любой Java-класс или методы из Kotlin, и наоборот. Таким образом, вы даже можете сделать Activity на основе Kotlin вместе с активностью на основе Java, и это будет вам полезно. Хотя я рекомендую вам просто использовать 100% Kotlin, так как его намного проще разрабатывать и читать.
Попробуй это:
Измените ваш Net_Activity на NetActivity. Это намного лучше для глаз. Не забудьте сменить AndroidManifest.xml
Измените свой setOnClickListener на
bButton.setOnClickListener {
// Handler code here.
val intent = Intent(this, NetActivity::class.java)
startActivity(intent)
}
Есть ли у вас функция main в вашем NetActivity, как в public static void main(String[] args)? Это не то, как вы это делаете. Вы можете переопределить другой метод Activity, такой как onCreate(), onResume() и т. д. Попробуйте прочитать Основы приложений еще раз.
Похоже, что когда вы используете 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. (Объявление намерения val находится внутри MainActivity, а не Net_Activity.) Является ли такой способ мышления правильным, поскольку Net_Activity является активностью kotlin, а не классом java?
Ах, я думал, ваш код находится в Net_Activity - это должно быть правильно.
Чего вы пытаетесь достичь в своем
Net_Activity? Почему у него есть эта функцияmain(args: Array<String>)?