如何在 Kotlin 中将数据从 Service 传递到 Activity?

     2023-04-19     307

关键词:

【中文标题】如何在 Kotlin 中将数据从 Service 传递到 Activity?【英文标题】:How do I pass data from Service to Activity in Kotlin? 【发布时间】:2021-08-17 03:35:28 【问题描述】:

CS 学生的初学者警告

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

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

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

我只能找到 Java 教程,我不会翻译。

如何将它从那里获取到 MainActivity? TIA

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

这些方法真的很复杂。尤其是涉及数据库,但即使是实时数据也是大材小用。【参考方案2】:

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

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

【讨论】:

我们最终设法使用 SharedPreferences 来完成它,尽管可能不推荐用于生产【参考方案3】:

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

【讨论】:

【参考方案4】:

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

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

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

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

在您的MainActivity 类中,在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 Broadcast Intents and Broadcast Receivers

希望对你有帮助。

【讨论】:

LocalBroadcastManager 已弃用。有没有其他办法?

如何在 Kotlin 中将数据类转换为 ByteBuffer?

】如何在Kotlin中将数据类转换为ByteBuffer?【英文标题】:HowtoconvertaDataClasstoByteBufferinKotlin?【发布时间】:2019-02-0707:17:42【问题描述】:我正在尝试使用Kinesis,它需要字节缓冲区格式的数据。到目前为止,我看到的所有示例都是... 查看详情

如何在 Kotlin 中将 Epoch 转换为 OffsetDateTime?

】如何在Kotlin中将Epoch转换为OffsetDateTime?【英文标题】:HowtoconvertanEpochtoaOffsetDateTimeinKotlin?【发布时间】:2019-09-2207:59:22【问题描述】:当使用Kotlin等高级语言调用postgresqlTimestampwithTimeZone数据类型时,需要提供OffsetDateTime。我... 查看详情

在 android studio kotlin 中将数据从活动传递到片段(不重复,这些方法不起作用)

】在androidstudiokotlin中将数据从活动传递到片段(不重复,这些方法不起作用)【英文标题】:passingdatafromactivitytofragmentinandroidstudiokotlin(notduplicate,thosemethodisnotworking)【发布时间】:2022-01-2405:25:11【问题描述】:我有一个名为Image... 查看详情

如何在 Kotlin 中将 TypeToken + 泛型与 Gson 一起使用

】如何在Kotlin中将TypeToken+泛型与Gson一起使用【英文标题】:HowtouseTypeToken+genericswithGsoninKotlin【发布时间】:2016-01-2715:44:26【问题描述】:我无法从自定义类(Turns)中获取泛型类型列表:valturnsType=TypeToken<List<Turns>>().typeval... 查看详情

如何在 Kotlin 中将字符串转换为 InputStream?

】如何在Kotlin中将字符串转换为InputStream?【英文标题】:HowtoconvertaStringtoanInputStreaminKotlin?【发布时间】:2021-01-1804:13:50【问题描述】:我有一个字符串:varmyString:String="MyString"如何在Kotlin中将其转换为InputStream?【问题讨论】... 查看详情

如何在处理程序中将 java 转换为 kotlin

】如何在处理程序中将java转换为kotlin【英文标题】:HowtoConvertjavatokotlininhandler【发布时间】:2017-11-1208:31:49【问题描述】:newHandler().postDelayed(newRunnable()@Overridepublicvoidrun()/*CreateanIntentthatwillstarttheMenu-Activity.*/IntentmainInten 查看详情

如何在 Kotlin 中将 String 转换为 Int?

】如何在Kotlin中将String转换为Int?【英文标题】:HowtoconvertStringtoIntinKotlin?【发布时间】:2022-01-0219:26:41【问题描述】:我正在Kotlin中开发一个控制台应用程序,我在main()函数中接受多个参数funmain(args:Array<String>)//validation&... 查看详情

如何在 Kotlin 中将 ArrayList 转换为 JSONArray()

】如何在Kotlin中将ArrayList转换为JSONArray()【英文标题】:HowtoconvertArrayListtoJSONArray()inKotlin【发布时间】:2020-05-1312:06:01【问题描述】:我的POJO类中有一个列表:"userQuoteTravellers":["id":1354,"quoteId":526,"travellerId":null]我想传递这个列表... 查看详情

如何在我的 recyclerview 适配器中将 API 日期转换为 Kotlin 中的字符串?

】如何在我的recyclerview适配器中将API日期转换为Kotlin中的字符串?【英文标题】:HowtoconvertAPIdatetostringinKotlinwithinmyrecyclerviewadapter?【发布时间】:2022-01-0411:10:30【问题描述】:我需要像这样将API日期从(yyyy-MM-ddHH:mm:ss)格式转换为(... 查看详情

如何在 Kotlin 中将列表转换为地图?

】如何在Kotlin中将列表转换为地图?【英文标题】:HowtoconvertListtoMapinKotlin?【发布时间】:2016-01-0108:01:45【问题描述】:例如,我有一个字符串列表,例如:vallist=listOf("a","b","c","d")我想将其转换为地图,其中字符串是键。我知... 查看详情

如何在 Kotlin 中将 listView 转换为 RecyclerView

】如何在Kotlin中将listView转换为RecyclerView【英文标题】:HowtoConvertlistViewtoRecyclerViewinKotlin【发布时间】:2020-04-2618:57:40【问题描述】:我在使用listView时遇到问题,因为我在listview中显示了很多图像(关于内存)我需要将listview转... 查看详情

如何在 Binding Adapter 中将此 java 代码写入 kotlin

】如何在BindingAdapter中将此java代码写入kotlin【英文标题】:HowtowritethisjavacodetokotlininBindingAdapter【发布时间】:2021-04-2811:39:10【问题描述】:我在lang(java)中用onBindViewHolder编写了几行代码。我正在尝试在BindingAdapter的kotlin中编写确... 查看详情

如何在 Kotlin 中将 Firestore 日期/时间戳转换为日期?

】如何在Kotlin中将Firestore日期/时间戳转换为日期?【英文标题】:HowdoIconvertaFirestoredate/TimestamptoDateinKotlin?【发布时间】:2019-09-1308:51:36【问题描述】:我正在使用firestore,当我从firestore获取时间戳时卡住了。我如何将此Timestamp(... 查看详情

如何在 Kotlin 中将字符串数组 JSON 转换为 ArrayList?

】如何在Kotlin中将字符串数组JSON转换为ArrayList?【英文标题】:howtoconvertstringarrayJSONtobeArrayListinKotlin?【发布时间】:2020-03-2416:04:51【问题描述】:所以我有这个字符串格式的JSON:["1.0","1.1","1.2"]但我需要在Kotlin中将其转换为Array... 查看详情

如何在 Kotlin 中将 View 转换为 Imageview [重复]

】如何在Kotlin中将View转换为Imageview[重复]【英文标题】:HowtoconvertViewintoImageviewinKotlin[duplicate]【发布时间】:2020-11-1502:25:49【问题描述】:funtap(view:View)valimg=view我希望这个变量img是一个图像视图,但是我想知道如何将视图转换... 查看详情

在 Android 中将 MySql 查询转换为 SQL Room 查询 - kotlin

】在Android中将MySql查询转换为SQLRoom查询-kotlin【英文标题】:ConvertingMySqlQuerytoSQLRoomqueryinAndroid-kotlin【发布时间】:2021-08-2414:01:24【问题描述】:我刚刚从后端获得了以下mysql查询。我必须使用Android中的Room数据库在本地管理这些... 查看详情

如何在 Kotlin 中将函数接收器类型与 SAM 接口一起使用

】如何在Kotlin中将函数接收器类型与SAM接口一起使用【英文标题】:HowtousefunctionreceivertypewithSAMinterfacesinKotlin【发布时间】:2022-01-0821:56:16【问题描述】:我来自Java,并且是Kotlin的新手。我试图了解如何将receivertype与指定为功能... 查看详情

如何使用 kotlin 在 android studio 中将按钮与网站链接

】如何使用kotlin在androidstudio中将按钮与网站链接【英文标题】:Howtolinkbuttonwithwebsiteinandroidstudiousingkotlin【发布时间】:2018-01-1401:44:55【问题描述】:我想将我的应用程序中的按钮与网站链接,因为当用户单击此按钮时,网站会... 查看详情