【问题标题】:Passing custom object between activities在活动之间传递自定义对象
【发布时间】:2021-06-29 14:25:03
【问题描述】:

我正在关注this 教程,了解如何在 Android Studio 中使用 MQTT。在其中,他们创建了一个使用MQTTAndroidClient 库的MQTTClient 类。我想将MQTTClient 类从一项活动传递到另一项活动。有什么建议我可以如何做到这一点?我是 Android 开发新手,我正在尝试在没有太多专业知识的情况下协商可序列化/可打包的工具。谢谢!

附:我在 Kotlin 开发

【问题讨论】:

    标签: android kotlin android-activity mqtt paho


    【解决方案1】:

    在活动之间传递复杂的类通常是个坏主意。对于这种用法,您应该使用 Singleton 并将其存储在您的 Application 类或类似的东西中。

    【讨论】:

    • 我对 Singleton 不熟悉。变量/对象在哪里初始化?
    • 谢谢,使用单例是可行的方法
    【解决方案2】:

    我不建议你通过活动传递整个MQTTClient

    我建议您阅读此 Dependency-Injection manual 或多或少是您所需要的,通常您会使用 dependency injection 库/框架来做您想做的事情,但因为大多数设置起来很复杂我会按照我之前链接的链接进行操作。

    示例代码:

    // Container of objects shared across the whole app
    class AppContainer {
    
        val mqttClient = MQTTClient() //<-- Initialisation 
    }
    

    然后创建一个自定义Application

    class MyApplication : Application() {
    
        // Instance of AppContainer that will be used by all the Activities of the app
        val appContainer = AppContainer()
    }
    

    不要忘记将其添加到带有 name 属性的manifest.xml

    然后从你的活动中你需要这个MQTTClient 你使用:

    val appContainer = (application as MyApplication).appContainer
    val mqttClient = appContainer.mqttClient
    

    @Ben-J 的建议也不错,要在 kotlin 中创建 Singleton,您可以使用 object 键盘。

    【讨论】:

    • 感谢您的评论。我认为单例是我将使用的方法
    猜你喜欢
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多