当前位置: 首页 > article >正文

Android Signal 使用

一、官方

文档地址

示例代码

二、使用前说明

一定要注意使用的Signal 的版本号,如果客户端与服务端的版本不一致,可能会出现收不到消息的问题!!!

三、使用

添加依赖

//signalr
implementation 'com.microsoft.signalr:signalr:7.0.0'
//也可以加入日志,文档中有写
//implementation 'org.slf4j:slf4j-jdk14:1.7.25'

编译没问题,但是运行的时候会报错

//在Android标签下添加这个,因为signalr中包含okhttp3引起的冲突
configurations {
    all*.exclude group: 'com.squareup.okhttp3', module: 'okhttp'
}

解决办法

当然也有说引入library依赖的方法

解决办法1

githup

创建连接

关键类com.microsoft.signalr.HubConnection和com.microsoft.signalr.HubConnectionBuilder

HttpHubConnectionBuilder httpHubConnectionBuilder = HubConnectionBuilder.create(serverUrl你的地址);
      //可以设置其他的参数  
      HubConnection hubConnection = httpHubConnectionBuilder.withTransport(TransportEnum.WEBSOCKETS).build();
        //hubConnection = httpHubConnectionBuilder.build();

接收消息

//与服务器交互,接收服务器的消息
//ReceiveMsg   与服务器约定的方法
//String.class 接收的类型,与服务器约定
//务必放在连接之前,hubConnection.start().blockingAwait()方法之前,不然无效
hubConnection.on("ReceiveXXMessage", new Action1<String>() {
    @Override
    public void invoke(String message) {//子线程
        //UI操作请切换到主线程,不然会出现不显示等问题
    }
}, String.class);

设置关闭连接的监听

//对被动关闭进行监听(比如网络异常)
hubConnection.onClosed(new OnClosedCallback() {
    @Override
    public void invoke(Exception exception) {
        Log.i("zxd", "exception: " + exception.getMessage());
    }
});

开始连接

hubConnection.start().blockingAwait();

关闭连接

 hubConnection.stop()

发送消息

/**
    与服务器交互,给服务器发消息
    SendMsg 与服务器约定的方法
    str1    与服务器约定的字段
*/
hubConnection.send("SendMsg", str1);
//hubConnection.send("SendMsg", str1, str2);//参数个数为不固定

连接的状态

if (hubConnection.getConnectionState() == HubConnectionState.DISCONNECTED) {
    hubConnection.start().blockingAwait();
}

三种状态:

CONNECTED,//已连接
DISCONNECTED,//未连接
CONNECTING,//连接中

参考

SignalR ——Android实践 kt

SignalR ——Android实践

Android 通过SignalR与服务器交互

Android signalr

android封装signalR的demo

.NET CORE SignalR Android 客户端


http://www.kler.cn/a/16697.html

相关文章:

  • C++中的std::tuple和std::pair
  • 华为云前台用户可挂载数据盘和系统盘是怎么做到的?
  • 【CVPR2024】2024年CVPR的3D 目标检测的综述(还在补充中)
  • 微信小程序中使用离线版阿里云矢量图标
  • StructuredStreaming (一)
  • Javaweb—Ajax与jQuery请求
  • 关于使用Notion的board做工作安排这件事
  • 『Linux』第九讲:Linux多线程详解(一)_ 线程概念 | 线程控制之线程创建 | 虚拟地址到物理地址的转换
  • 云原生技术概谈
  • 医院安全(不良)事件报告系统 PHP语言实现
  • 【华为/华三】PPP
  • springbean 并发安全
  • Vue3中如何实现数字翻牌效果?
  • Redis-哈希
  • 互联网摸鱼日报(2023-04-29)
  • Docker基本管理
  • 少儿编程scratch
  • 7-1 设计一个学生类和它的一个子类——本科生类(interface接口)
  • PyTorch机器学习与深度学习技术方法
  • 微信小程序定义模板
  • 基于松鼠算法的极限学习机(ELM)回归预测-附代码
  • MySQL调优笔记——慢SQL优化记录(1)
  • 【热门框架】Maven分模块开发是什么意思?怎样操作?
  • 【Python百日进阶-Web开发-Feffery】Day613- 趣味Dash_13:PDF转换中心的项目优化
  • 马云任东京大学特聘客座教授,研究方向为可持续农业和粮食生产
  • 【Java笔试强训 22】