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

相关推荐
檀越剑指大厂2 小时前
容器化 Android 开发效率:cpolar 内网穿透服务优化远程协作流程
android
MiyamuraMiyako3 小时前
从 0 到发布:Gradle 插件双平台(MavenCentral + Plugin Portal)发布记录与避坑
android
NRatel4 小时前
Unity 游戏提升 Android TargetVersion 相关记录
android·游戏·unity·提升版本
叽哥6 小时前
Kotlin学习第 1 课:Kotlin 入门准备:搭建学习环境与认知基础
android·java·kotlin
风往哪边走6 小时前
创建自定义语音录制View
android·前端
用户2018792831676 小时前
事件分发之“官僚主义”?或“绕圈”的艺术
android
用户2018792831676 小时前
Android事件分发为何喜欢“兜圈子”?不做个“敞亮人”!
android
墨鸦_Cormorant7 小时前
MQTT(轻量级消息中间件)基本使用指南
mqtt·中间件·消息中间件
Kapaseker8 小时前
你一定会喜欢的 Compose 形变动画
android
QuZhengRong9 小时前
【数据库】Navicat 导入 Excel 数据乱码问题的解决方法
android·数据库·excel