开发者社区 > 云原生 > 云消息队列 > 正文

MQTT中终端 Android,消息订阅时使用 IMqttActionListener接口?

MQTT中终端 Android,消息订阅时使用 IMqttActionListener接口onFailure,接口Java转kotlin出现异常是否有处理方案?java.lang.nullpointerexception: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkNotNullParameter, parameter exception?

展开
收起
真的很搞笑 2023-05-23 19:53:06 144 0
1 条回答
写回答
取消 提交回答
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    在Java代码转换为Kotlin代码的过程中,有些接口的参数需要添加@NonNull注解,以告诉Kotlin编译器该参数不可为空,否则在使用该参数时,会出现NullPointerException异常。

    针对此异常,可以检查代码中是否存在可能为空的参数,在参数使用前加上非空检查符号"!!",即对该参数进行强制非空检查,如果该参数为空,则会抛出NullPointerException。例如:

    override fun onFailure(asyncActionToken: IMqttToken?, exception: Throwable?) {
        if (exception != null) {
            Log.d(TAG, "onFailure: ${exception.message}")
        }
    }
    

    在这个方法中,参数exception可能为空,因此需要在使用之前添加非空检查符号"!!",如下所示:

    override fun onFailure(asyncActionToken: IMqttToken?, exception: Throwable?) {
        if (exception != null) {
            Log.d(TAG, "onFailure: ${exception.message!!}")
        }
    }
    

    这样,在调用exception.message时,即使该值为空,也会抛出异常,防止出现NullPointerException。

    2023-05-23 23:07:45
    赞同 展开评论 打赏

涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系产品 Serverless 化。RocketMQ 一站式学习:https://rocketmq.io/

相关产品

  • 云消息队列 MQ
  • 相关电子书

    更多
    58同城Android客户端Walle框架演进与实践之路 立即下载
    Android组件化实现 立即下载
    蚂蚁聚宝Android秒级编译——Freeline 立即下载