Как решить проблему с вызовом метода активности kotlin из java-синглтона? - PullRequest
2 голосов
/ 10 мая 2019

Я хотел бы вызвать этот метод:

fun workingWithBtn(k: Int) {
        when (k) {
            1 -> {
                btn_submit_t.showError();
                Handler().postDelayed({
                    this@LoginScr.runOnUiThread {
                        btn_submit_t.hideLoading()
                        btn_submit_t.isEnabled
                    }
                }, 1000)
            }
            2 -> {
                btn_submit_t.showSuccess()
            }
            3 -> Handler().postDelayed({
                clickCount--
                this@LoginScr.runOnUiThread {
                    btn_submit_t.hideLoading()
                    btn_submit_t.isEnabled
                }
            }, 1000)
        }
    }

этот метод помещен в основанную на kotlin активность, и я хотел бы вызвать его из java singleton. Я называю этот метод из синглтона так:

new LoginScr().workingWithBtn(3);

но я получаю ошибку:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference

насколько я понимаю, мой класс не может найти мою кнопку. Я пытался использовать findViewById, а затем работать с btn, но это не помогло мне. Как я могу решить эту проблему?

1 Ответ

1 голос
/ 10 мая 2019

Мне удалось решить мою проблему с помощью BroadcastReceiver.Для этого решения мы должны добавить к нашему синглтону место, где нам понадобится вызов функции из этих строк:

Intent intent = new Intent();
intent.setAction("btn_task"); // name of your filter
intent.putExtra("url", 1);
context.sendBroadcast(intent); // here you won't need context but I have to use it from singleton

, затем мы создадим переменную для действия:

lateinit var receiver: BroadcastReceiver

затем мы присвоим значение:

val filter = IntentFilter("btn_task") // we will filter all intents with our filter

, а затем мы должны создать и зарегистрировать наш получатель:

receiver = object : BroadcastReceiver() {
            override fun onReceive(context: Context, intent: Intent) {
                workingWithBtn(intent.extras.getInt("url"))
            }
        }
registerReceiver(receiver, filter)

удалить получателя, когда активность будет уничтожена:

override fun onDestroy() {
        super.onDestroy()
        unregisterReceiver(receiver)
    }

Может быть, это поможет кому-то еще.Удачи:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...