Android MQTT关于断开连接disconnect报错原因

最近项目遇到一个需求,就是在登录状态的时候。才能接收到消息。所有我在上线,下线状态的时候。做了MQTT断开和连接的动作。然后就是发生了。我们标题的这关键点了。直接报错了。报错的内容如下:

MqttAndroidClient unregisterRecevicer after disconnect throw missing call unregisterRecevicer...

直接报错了。跟剧情完全不一样啊,但是好奇怪。之前是页面销毁就不会报这个错误。之前是退出登录的时候。页面顺带一起销毁Service的。就没问题。然后现在是页面还在。但是给执行Service的绑定和解绑动作的时候就会出现问题。
如果你依赖的也是下面的这个,那么这个帖子应该有希望会帮到你:
implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5'
implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'

/**
     * 开启service
     */
    public static void startService(Context context) {
        mqttSetUp = null;
        TOPIC = UUID_PREFIX + SharedCacheUtils.getInstance(context).getUUid();
        if (context != null) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                context.startForegroundService(new Intent(context.getApplicationContext(), MQTTService.class));
            } else {
                context.startService(new Intent(context.getApplicationContext(), MQTTService.class));
            }
        }
    }

​
/**
     * 关闭service
     */
    public static void stopService(Context context) {
        if (context != null) {
            context.stopService(new Intent(context.getApplicationContext(), MQTTService.class));
        } else {// 如果异常关闭,导致UI关闭,服务没解绑。走else
            try {
                if (client != null) {
                    client.unregisterResources();
                    client.close();
                    client.disconnect(0);
                    client.setCallback(null);
                }
                client = null;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

​
这个是我之前的代码,然后我就去查找这个问题的解决思路,然后就发现了很多帖子的作者也遇到了这个问题。报错信息是一样的。但是好像没有解决我的问题。离谱的是,我搜到了好多VIP的帖子。我看不了。哈哈哈。没有分享精神啊!差评。
然后我就去该依赖的报错反馈信息里面找找看。果然有,但是很多都是建议。能不能用还得靠自己实践了才知道有没有帮助。我发现很多帖子都有点像是AI的,很不靠谱。后面通过自己实践之后就解决了,解决方案如下:
/**
     * 关闭service
     */
    public static void stopService(Context context) {
        if (context != null) {
            context.stopService(new Intent(context.getApplicationContext(), MQTTService.class));
        } else {// 如果异常关闭,导致UI关闭,服务没解绑。走else
            try {
                if (client != null) {
                    client.unregisterResources();
                    client.close();
                    //client.disconnect(0);
                    client.setCallback(null);
                }
                client = null;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
注释disconnect的动作。就不会报错了。如果你有更好的解决方式,欢迎评论哦!下面就是解决方法的出处。希望能帮助到你。

https://github.com/eclipse-paho/paho.mqtt.android/issues/212

相关推荐
van叶~13 分钟前
仓颉语言实战——2.名字、作用域、变量、修饰符
android·java·javascript·仓颉
m0_7482393316 分钟前
【PHP】部署和发布PHP网站到IIS服务器
android·服务器·php
小林爱44 分钟前
【Compose multiplatform教程14】【组件】LazyColumn组件
android·前端·kotlin·android studio·框架·多平台
牧杉-惊蛰1 小时前
html转PDF
android·pdf
yangfeipancc8 小时前
数据库-用户管理
android·数据库
字节流动8 小时前
Android Java 版本的 MSAA OpenGL ES 多重采样
android·java·opengles
xuanfengwuxiang8 小时前
安卓帧率获取
android·python·测试工具·adb·性能优化·pycharm
柯南二号12 小时前
Task ‘wrapper‘ not found in project ‘:example‘. 报错解决
android·gradle·hippy
我又来搬代码了12 小时前
【Android】项目升级时报错 android:style/Holo.Widget
android·gitee
洞见不一样的自己15 小时前
android 常用方法
android