You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android(Kotlin)中SignalR始终DISCONNECTED,无法连接.NET 6服务器

Android(Kotlin) SignalR无法连接本地.NET 6服务器,始终处于DISCONNECTED状态

我在Android(Kotlin)项目中使用依赖 implementation 'com.microsoft.signalr:signalr:6.0.8',后端采用.NET 6,但模拟器无法连接本地服务器(localhost)。通过编写函数检查hubConnection.connectionState,发现其始终处于DISCONNECTED状态,且未出现任何报错。Web(React)端可正常与该后端交互。

SignalRListener代码

import com.microsoft.signalr.Action1
import com.microsoft.signalr.HubConnection
import com.microsoft.signalr.HubConnectionBuilder
import com.microsoft.signalr.HubConnectionState
import io.reactivex.rxjava3.core.Single
import org.slf4j.Logger
import org.slf4j.LoggerFactory


class SignalRListener private constructor(){
    private var hubConnection: HubConnection
    private var logger: Logger

    init {
        logger  = LoggerFactory.getLogger(HubConnection::class.java)
        // define in constructor
        hubConnection = HubConnectionBuilder.create("http://10.0.2.2:5291/hubs/presence")
            .withAccessTokenProvider(Single.defer { Single.just("${Constanst.TOKEN}") })
            .build()

        hubConnection.on("UserIsOnline",
            Action1 { member: Member -> println(member.DisplayName + "online") },
            Member::class.java
        )

        hubConnection.on("UserIsOffline",
            Action1 { username: String -> println(username+" offline") },
            String::class.java
        )

        hubConnection.on(
            "GetOnlineUsers",
            Action1 { usersOnline : List<Member> ->
                for (item in usersOnline) {
                    println(item.DisplayName)
                }
            },
            List::class.java
        )
        hubConnection.start().doOnError({ logger.info("Client connected error.") })
    }

    private object Holder { val INSTANCE = SignalRListener() }

    companion object {
        @JvmStatic
        fun getInstance(): SignalRListener{
            return Holder.INSTANCE
        }
    }

    fun stopHubConnection(){
        if(hubConnection.connectionState == HubConnectionState.CONNECTED){
            hubConnection.stop()
        }
    }

    fun getConnectionState(){
        println(hubConnection.connectionState.toString())
    }

    fun log(){
        logger.info("Debug infor siganlR {}", hubConnection.connectionId)
    }
}

Web(React)端可正常连接该后端。

MainActivity代码

class MainActivity : AppCompatActivity() {
    lateinit var signalR: SignalRListener;
    var btnCheck: Button? = null
    var btnLog: Button? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        signalR = SignalRListener.getInstance()

        btnCheck = findViewById(R.id.btnCheck)
        btnCheck?.setOnClickListener {
            signalR.getConnectionState()
        }

        btnLog = findViewById(R.id.btnLog)
        btnLog?.setOnClickListener {
            signalR.log()
        }
    }
}

内容的提问来源于stack exchange,提问作者NamNguyen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 00:20:56