android - 连接到服务器时更改活动 (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
解决方案
将回调传递给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
推荐阅读
- c++ - 使用相同驱动程序的多个设备的单个 DLL
- android - 如何在android studio 4.0中启用图像到图像之间的转换,而不会在两个活动之间突然飞溅
- jsf - 如何在 PrimeFaces 或 JSF 中异步加载表格的单个行元素?
- swift - 为什么滚动后我的单元格中的图标会发生变化?
- sql - 我在 Postgres 中的这个查询有问题
- c++ - 如何打印类型名称(主题模板)
- amazon-web-services - 如何在 Lambda 函数中获取 S3 触发器详细信息?
- c - 我是否需要一个 Rc 类型来在其成员 C 结构中存储指向 Rust 结构的指针
- python-3.x - 我想根据 PySpark 中的模式匹配将所有条目提取为列表
- sql - 分隔符后如何拆分