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 使用方法相关推荐

  1. android访问网络的方法,Android Http协议访问网络实例(3种)

    之前关于Android Http协议访问网络的一点分析,最近需要回顾,就顺便发到随笔上了 Android中http连接主要是为了获取网络数据,目前了解的有3种方法: Httpconnection -- ...

  2. androidclient和站点数据交互的实现(基于Http协议获取数据方法)

    androidclient一般不直接訪问站点数据库,而是像浏览器一样发送get或者post请求.然后站点返回client能理解的数据格式,client解析这些数据.显示在界面上.经常使用的数据格式是x ...

  3. android 生成aar文件,Android 中.aar文件生成方法与用法

    https://i.cnblogs.com/EditPosts.aspx?opt=1 无论是用Eclipse还是用Android Studio做android开发,都会接触到jar包,全称应该是:Ja ...

  4. android 手机 平板同屏,酷乐视Q6投影仪Android手机/平板同屏方法汇总

    酷乐视Q6投影仪Android手机/平板同屏方法汇总,详情如下: Q:华为手机如何同屏? 1)手机与投影机同时打开WiFi开关(是否连接网络均可): 2)投影机点击主界面无线同屏图标 3)手机端操作如 ...

  5. android sip服务器,android sip协议通话实现

    android sip协议通话代码实现 简介 android里面的VOIP网络通话基于sip(Session initiation protocol)协议:android已经集成了sip协议栈,并提供 ...

  6. Android HTTP协议请求网络(二)之HttpClient方式

    Android HTTP协议请求网络(一)之认识探索 Android HTTP协议请求网络(三)之HttpURLConnection方式 githup练习demo地址:https://github.c ...

  7. android蓝牙传输脉冲,一种基于Android操作系统的激光测距仪蓝牙通信方法与流程...

    本发明属于无线通信技术领域,涉及Android操作系统的应用,具体涉及一种基于Android操作系统的激光测距仪蓝牙通信方法. 背景技术: 目前,随着智能设备的普及,智能操作系统得到了极大的发展,An ...

  8. Xposed: 勾住(Hook) Android应用程序对象的方法,实现AOP

    Xposed Xposed能够勾住(Hook) Android应用程序对象的方法,实现AOP,一个简单的例子: public class WebViewHook implements IXposedH ...

  9. 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 ...

最新文章

  1. NC:电缆细菌减少水稻种植土壤中的甲烷排放
  2. 解决Linux下inode使用率100%的问题
  3. 使用linux_Linux中VIM使用技巧
  4. ssm(Spring+Spring mvc+mybatis)实体类——Dept
  5. Loguru:Python 日志终极解决方案
  6. Android API level 版本对应关系
  7. JavaWeb: Redis存储Session方案
  8. 华为云OCR文字识别 免费在线体验!
  9. mysql font连接数据库_MySQL-Front连接数据库的详细操作流程
  10. 两个孤寡老人不领证同居在一起合适吗?
  11. Oracle常用操作【自己的练习】
  12. Maximum Score After Splitting a String
  13. linux 445端口关闭,windows关闭445端口
  14. R 语言图形函数 par()参数应用举例
  15. 爬虫(29)mongodb(下)
  16. FinalShell Mac OS版安装
  17. 懂技术/ 更应该了解社会 /让社会变好 中国社会学家 周孝正经典语录
  18. 租用游艇问题——动态规划
  19. Ubuntu下安装deb包命令
  20. vue.js提示框插件(vuejs-dialog)使用指南

热门文章

  1. 牛客网 SQL大厂面试真题篇 SQL2 平均播放进度大于60%的视频类别
  2. 开源项目加Apache License2.0不会用,看看Apache Ant怎么做
  3. python+selenium实现自动登录phpwind论坛自动随机发帖
  4. 离散数学实验:计算真值
  5. 学习编码:15个针对软件开发人员的免费教育性编程课程
  6. 将博客流量增长4倍的27种简单方法(免费)
  7. 数据结构课设——宿舍管理查询软件(文件读取与查找排序)
  8. gentoo 屏幕截图工具 scrot
  9. 国内各大企业开工时间出炉,这些公司有点狠...
  10. 使用 MSU StegoVideo 将信息隐藏进 AVI 视频文件中(两种方法 + 详细图文过程)