繁体   English   中英

如何在 Kotlin 中将数据从服务传递到活动?

[英]How do I pass data from Service to Activity in Kotlin?

初学者警告虽然 CS 学生

我有一个名为 RestApiService 的服务和一个名为 MainActivity 的活动。

我有一个存储在 RestApiService 中的令牌。

链接中是 imgur https://imgur.com/a/Msu04xj中 RestApiService 的屏幕截图

我只在 Java 中找到教程,我无法翻译。

我如何从那里得到它到 MainActivity? TIA

BroadCastReceiver 将帮助您,在您的服务中发送广播意图,在您的活动中,您将收到您的数据。

您可以使用Local BroadcastReceiver将数据从服务发送到活动

请在您获得令牌的RestApiService class 中尝试此代码:

val intent = Intent("RestApiData")
intent.putExtra("token", myToken)
LocalBroadcastManager.getInstance(this).sendBroadcast(intent)

在上面的代码中, "RestApiData"是广播接收器的主键,您需要在活动中获取数据, "token"是 myToken 值的键

在您的MainActivity class 中,在onCreate方法中使用以下代码:

LocalBroadcastManager.getInstance(this).registerReceiver(tokenPassingReceiver, IntentFilter("RestApiData"))

现在在活动的 onCreate 方法之外使用以下代码:

 private val tokenPassingReceiver: BroadcastReceiver = object : BroadcastReceiver() {
        override fun onReceive(context: Context, intent: Intent) {
            val bundle = intent.extras
            if (bundle != null) {
                if (bundle.containsKey("token")) {
                    val tokenData = bundle.getString("token")
                    Log.e("MainActivity--","token--$tokenData")

                }
            }
        }
 }

有关更多信息,请查看此链接: Kotlin Android 广播意图和广播接收器

我希望它可以帮助你。

一种方法是使用一些数据库,将其存储在那里,然后您可以在 MainAcitivty 级别观察数据库以在其可用时获取该值。

另一种方法是使用共享首选项 liveData ,您将再次在 MainActivity 上观察到它,但我想这有点棘手

我会 go 创建一个实体,您将使用 Room 将其保存在数据库中,然后使用 ViewModel 组件将 liveData 公开给 MainActivity

最简单的方法 - 绑定到服务,并使用 function 为服务定义一个 Binder 以获取值。 然后你可以调用 function 来获取令牌。 Binder 作为 bindService() 的返回返回给 Activity。

这是 Google 在 kotlin 中这样做的示例: https://developer.android.com/guide/components/bound-services#kotlin

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM