[英]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.