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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 03:42:39