Android Studio Java项目中如何获取SignalR服务器任务的返回字符串?
解决Android Java客户端接收SignalR服务器返回值的问题
错误原因
你遇到的Cannot resolve symbol 'done'错误,是因为代码里直接引用了不存在的done变量——服务器返回的是字符串"done",但客户端不能直接把它当成变量用,得通过回调接收返回值。
正确实现步骤
1. 确保依赖配置正确
在Android项目的Module级别build.gradle中添加SignalR客户端依赖:
implementation 'com.microsoft.signalr:signalr:7.0.12' // 可替换为最新稳定版本
2. 完整客户端调用代码示例
import com.microsoft.signalr.HubConnection; import com.microsoft.signalr.HubConnectionBuilder; import android.os.Handler; import android.os.Looper; // 初始化Hub连接 HubConnection hubConnection = HubConnectionBuilder.create("你的SignalR服务器完整Hub地址") .build(); // 启动连接并调用服务器方法 hubConnection.start().subscribe(() -> { // 连接成功后,调用服务器的test方法 hubConnection.invoke(String.class, "test", "自定义测试字符串") .subscribe(result -> { // 接收服务器返回的结果(即"done"或其他值) // Android UI操作需在主线程,通过Handler切换 new Handler(Looper.getMainLooper()).post(() -> { // 处理返回值,比如判断是否为"done" if ("done".equals(result)) { // 执行数据库连接成功后的逻辑 } // 也可直接使用result做其他操作,比如打印或展示到UI }); }, error -> { // 处理方法调用失败的异常 error.printStackTrace(); }); }, error -> { // 处理连接失败的异常 error.printStackTrace(); });
3. 关键说明
- 调用服务器方法用
invoke方法:第一个参数指定返回值类型(这里是String.class),第二个参数是服务器方法名"test",后续是要传入的参数。 - 通过
subscribe的第一个回调获取返回的result,这个result就是服务器返回的字符串,不要直接写done变量,而是用字符串常量"done"做比较。 - 必须确保UI操作在主线程执行,所以用
Handler切换线程处理返回结果。
额外注意事项
- 服务器端的
test方法需放在Hub类中,且为public权限;若方法名与调用名一致,可省略[HubMethodName("test")]注解,建议显式添加以避免歧义。 - 要处理连接断开、调用超时等异常,避免程序崩溃。
- 在Activity/Fragment销毁时,记得关闭Hub连接:
hubConnection.stop();
内容的提问来源于stack exchange,提问作者RUSHI HARDWARE
相关产品推荐
相关产品推荐

