首页 > 解决方案 > 连接到服务器时更改活动 (TCP)

问题描述

在检查输入是否正确后,我将活动绑定到服务以向其发送 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

标签: androidsocketskotlinandroid-activity

解决方案


将回调传递给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

推荐阅读