@tmkbl

Как вызвать нестатическую функцию Kotlin из статического класса Java?

Пишу приложение для Android в Android Studio. Использую язык Kotlin. Но есть Java-класс, в котором реализована работа с MQTT-сервером. Мне нужно, чтобы при получении сообщения от MQTT-брокера вызывалась функция handleMqttMessage() из класса MainActivity. Дело в том, что MQTT-класс - статический, и так просто функцию не вызовешь. Пробовал заносить функцию handleMqttMessage() в companion object, но проблема в том, что из-под него не видно других фунций этого же класса, их нельзя вызвать (а мне это нужно). Пробовал еще таким образом вызывать:
new MainActivity().handleMqttMessage();
Но тогда отваливается соединение с MQTT-сервером:

E/MQTT_handler: Connection lost MqttException (0) - java.lang.RuntimeException: Can't create handler inside thread Thread[MQTT Call: AndroidClient,5,main] that has not called Looper.prepare() at org.eclipse.paho.client.mqttv3.internal.CommsCallback.run(CommsCallback.java:228) at java.lang.Thread.run(Thread.java:919) Caused by: java.lang.RuntimeException: Can't create handler inside thread Thread[MQTT Call: AndroidClient,5,main] that has not called Looper.prepare()


Как мне сделать вызов handleMqttMessage(), который находится в классе MainActivity, из static класса MQTT, чтобы handleMqttMessage() при этом видела все функции своего класса?
  • Вопрос задан
  • 95 просмотров
Решения вопроса 1
@WaterSmith
Android-разработчик. Java, Kotlin
Ваш MQTT-класс должен вызвать handleMqttMessage() у какой-то конкретной MainActivity, следовательно, в ваш статический метод MQTT-класса нужно передать эту активити, например в параметре вызываемого метода.
А вызывая таким образом:
new MainActivity().handleMqttMessage();
вы создаете активити неестественным образом вне жизненного цикла, и даже если бы так можно было делать, то что вам даст вызов handleMqttMessage у только что созданной активити, а не у той, которая запущена?
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽