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

相关推荐
阿巴斯甜3 小时前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker4 小时前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq95275 小时前
Andorid Google 登录接入文档
android
黄林晴6 小时前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab19 小时前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿21 小时前
Android MediaPlayer 笔记
android
Jony_1 天前
Android 启动优化方案
android
阿巴斯甜1 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android
张小潇1 天前
AOSP15 Input专题InputReader源码分析
android
_小马快跑_1 天前
Kotlin | 协程调度器选择:何时用CoroutineScope配置,何时用launch指定?
android