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 Compose 状态的概念
android·compose·重组·状态·组合·mutablestate·mutablestateof
Jerry2 小时前
Compose 约束条件和修饰符顺序
android
千里马学框架4 小时前
安卓系统中线程优先级Priority查看方式汇总
android·framework·线程·安卓framework开发·优先级·priority
沐怡旸4 小时前
【Android】Handler/Looper机制相关的类图和流程图
android
生莫甲鲁浪戴4 小时前
Android Studio新手开发第二十一天
android·ide·android studio
生莫甲鲁浪戴4 小时前
Android Studio新手开发第二十二天
android·ide·android studio
用户41659673693554 小时前
Jetpack Compose 中实现带圆角边框的单词级富文本效果(分词与布局实践)
android
顾林海4 小时前
Android UI优化:让你的APP从“卡顿掉帧”到“丝滑如德芙”
android·面试·性能优化
啊森要自信5 小时前
【MySQL 数据库】MySQL用户管理
android·c语言·开发语言·数据库·mysql
黄毛火烧雪下5 小时前
(二)Flutter插件之Android插件开发
android·flutter