android tcpstomp协议,StompProtocolAndroid 使用方法
STOMP是一个简单的可互操作的协议, 被用于通过中间服务器在客户端之间进行异步消息传递。它定义了一种在客户端与服务端进行消息传递的文本格式.
1.引入类库
dependencies {
api "com.github.NaikSoftware:StompProtocolAndroid:1.6.4"
api "io.reactivex.rxjava2:rxjava:2.2.5"
}
2.初始化stompClient对象 并监听连接状态
stompClient = Stomp.over(OKHTTP, Const.address);
stompClient.lifecycle().subscribe(lifecycleEvent -> {
//关注lifecycleEvent的回调来决定是否重连
switch (lifecycleEvent.getType()) {
case OPENED:
Log.d(Const.TAG, "forlan debug stomp connection opened");
break;
case ERROR:
Log.e(Const.TAG, "forlan debug stomp connection error is ", lifecycleEvent.getException());
break;
case CLOSED:
Log.d(Const.TAG, "forlan debug stomp connection closed");
break;
}
});
3.发起连接 headers信息根据具体情况填入
ArrayList headers = new ArrayList<>();
headers.add(new StompHeader("userId", "103"));
//这里必须添加headers 否则会报错 headers可以添加用户的认证相关信息
stompClient.connect(headers);
4.发起订阅信息
stompClient.topic(Const.broadcastResponse)
.subscribe(new DisposableSubscriber() {
@Override
public void onNext(StompMessage stompMessage) {
Log.d(Const.TAG, "Received== " + stompMessage.toString());
Log.i(Const.TAG, "Receive: " + stompMessage.getPayload());
runOnUiThread(() -> {
try {
JSONObject jsonObject = new JSONObject(stompMessage.getPayload());
resultText.append(jsonObject.getString("response") + "\n");
} catch (JSONException e) {
e.printStackTrace();
}
});
}
@Override
public void onError(Throwable t) {
Log.e(Const.TAG, "Stomp topic error", t);
}
@Override
public void onComplete() {
Log.e(Const.TAG, "Stomp connection onComplete");
}
});
5.发送消息 由相对应的订阅渠道返回信息
stompClient.send(Const.broadcast).subscribe();
如果需要取消订阅,可以通过这种方式
private CompositeDisposable compositeDisposable;
private void resetSubscriptions() {
if (compositeDisposable != null) {
compositeDisposable.dispose();
}
compositeDisposable = new CompositeDisposable();
}
public void topicData() {
resetSubscriptions();
Disposable dispTopic = stompClient.topic(address)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(stompMessage -> {
Log.i(TAG, stompMessage.getPayload());
}, throwable -> {
Log.e(TAG, "Error on subscribe topic", throwable);
});
compositeDisposable.add(dispTopic);
}
//取消订阅
public void unSubcribe() {
compositeDisposable.dispose();
}
7.设置全局异常监听(如果不设置,连接出现异常时会出现The exception was not handled due to missing onError , java.lang.IllegalStateException: Not connected 并闪退)
RxJavaPlugins.setErrorHandler(new Consumer() {
@Override
public void accept(Throwable throwable) throws Exception {
L.i("throwable==", throwable.getMessage());
}
});
android tcpstomp协议,StompProtocolAndroid 使用方法相关推荐
- android访问网络的方法,Android Http协议访问网络实例(3种)
之前关于Android Http协议访问网络的一点分析,最近需要回顾,就顺便发到随笔上了 Android中http连接主要是为了获取网络数据,目前了解的有3种方法: Httpconnection -- ...
- androidclient和站点数据交互的实现(基于Http协议获取数据方法)
androidclient一般不直接訪问站点数据库,而是像浏览器一样发送get或者post请求.然后站点返回client能理解的数据格式,client解析这些数据.显示在界面上.经常使用的数据格式是x ...
- android 生成aar文件,Android 中.aar文件生成方法与用法
https://i.cnblogs.com/EditPosts.aspx?opt=1 无论是用Eclipse还是用Android Studio做android开发,都会接触到jar包,全称应该是:Ja ...
- android 手机 平板同屏,酷乐视Q6投影仪Android手机/平板同屏方法汇总
酷乐视Q6投影仪Android手机/平板同屏方法汇总,详情如下: Q:华为手机如何同屏? 1)手机与投影机同时打开WiFi开关(是否连接网络均可): 2)投影机点击主界面无线同屏图标 3)手机端操作如 ...
- android sip服务器,android sip协议通话实现
android sip协议通话代码实现 简介 android里面的VOIP网络通话基于sip(Session initiation protocol)协议:android已经集成了sip协议栈,并提供 ...
- Android HTTP协议请求网络(二)之HttpClient方式
Android HTTP协议请求网络(一)之认识探索 Android HTTP协议请求网络(三)之HttpURLConnection方式 githup练习demo地址:https://github.c ...
- android蓝牙传输脉冲,一种基于Android操作系统的激光测距仪蓝牙通信方法与流程...
本发明属于无线通信技术领域,涉及Android操作系统的应用,具体涉及一种基于Android操作系统的激光测距仪蓝牙通信方法. 背景技术: 目前,随着智能设备的普及,智能操作系统得到了极大的发展,An ...
- Xposed: 勾住(Hook) Android应用程序对象的方法,实现AOP
Xposed Xposed能够勾住(Hook) Android应用程序对象的方法,实现AOP,一个简单的例子: public class WebViewHook implements IXposedH ...
- MyEclipse 10 中安装Android ADT 22插件的方法
MyEclipse 10 中安装Android ADT 22插件的方法 下载ADT包:http://dl.google.com/android/ADT-22.0.0.zip 将ADT-22.0.0.z ...
最新文章
- NC:电缆细菌减少水稻种植土壤中的甲烷排放
- 解决Linux下inode使用率100%的问题
- 使用linux_Linux中VIM使用技巧
- ssm(Spring+Spring mvc+mybatis)实体类——Dept
- Loguru:Python 日志终极解决方案
- Android API level 版本对应关系
- JavaWeb: Redis存储Session方案
- 华为云OCR文字识别 免费在线体验!
- mysql font连接数据库_MySQL-Front连接数据库的详细操作流程
- 两个孤寡老人不领证同居在一起合适吗?
- Oracle常用操作【自己的练习】
- Maximum Score After Splitting a String
- linux 445端口关闭,windows关闭445端口
- R 语言图形函数 par()参数应用举例
- 爬虫(29)mongodb(下)
- FinalShell Mac OS版安装
- 懂技术/ 更应该了解社会 /让社会变好 中国社会学家 周孝正经典语录
- 租用游艇问题——动态规划
- Ubuntu下安装deb包命令
- vue.js提示框插件(vuejs-dialog)使用指南
热门文章
- 牛客网 SQL大厂面试真题篇 SQL2 平均播放进度大于60%的视频类别
- 开源项目加Apache License2.0不会用,看看Apache Ant怎么做
- python+selenium实现自动登录phpwind论坛自动随机发帖
- 离散数学实验:计算真值
- 学习编码:15个针对软件开发人员的免费教育性编程课程
- 将博客流量增长4倍的27种简单方法(免费)
- 数据结构课设——宿舍管理查询软件(文件读取与查找排序)
- gentoo 屏幕截图工具 scrot
- 国内各大企业开工时间出炉,这些公司有点狠...
- 使用 MSU StegoVideo 将信息隐藏进 AVI 视频文件中(两种方法 + 详细图文过程)