Изменение активности при подключении к серверу (TCP)

#android #sockets #kotlin #android-activity

#Android #сокеты #kotlin #android-активность

Вопрос:

После того, как я проверю правильность входных данных, я привязываю действие к сервису, чтобы отправить ему ip, порт … и начать новое действие. Но я хочу начать действие только после того, как приложение успешно подключится к серверу, иначе нет.

Первое действие

 btnConnect.setOnClickListener {
    //some checks
    //if checks pass

    //bind to service
    Intent(this, MyService::class.java).also { intent ->
            intent.putExtra("ip1", ip1)
            intent.putExtra("port1", port1)
            bindService(intent, connection, Context.BIND_AUTO_CREATE)
        }

    //  should wait here until connected  

    //open new activity
    val intent = Intent(this, HomeActivity::class.java)
    startActivity(intent)
}
  

Соединение в службе

 fun startConnection(ip: String, port: Int) {
    try {
        socket = Socket(ip, port)
        //if successful continue below
  

Комментарии:

1. в чем вопрос?

2. Я хочу начать новую активность при успешном подключении к серверу, а не сразу, как сейчас

Ответ №1:

Как насчет передачи обратного startConnection вызова методу? Это будет выглядеть примерно так

 btnConnect.setOnClickListener {

    Intent(this, MyService::class.java).also { intent ->
            intent.putExtra("ip1", ip1)
            intent.putExtra("port1", port1)
            bindService(intent, connection, Context.BIND_AUTO_CREATE)
        }


    startConnection("localhost", 8080, onConnectionEstablished = {
        val intent = Intent(this, HomeActivity::class.java)
        startActivity(intent)
    })
}


fun startConnection(ip: String, port: Int, onConnectionEstablished: () -> Unit) {
    try {
        socket = Socket(ip, port)
        onConnectionEstablished()
        //stuff