如何使用视图模型,使用sqlite和广播接收器来更新UI?
问题描述:
我有一个用于测试连接的应用程序,它有一个20分钟的报警,并且必须与服务器具有独特的代码,并且服务器使用相同的代码,以确认发送短信。 我把所有的组件工作,但我不知道如何获得的唯一代码在UI自动更新。 报警写入每个请求到一个SQLite DB,我想的是自动更新用观察到的UI。如何使用视图模型,使用sqlite和广播接收器来更新UI?
我的项目是在科特林如果让任何区别。
基本上,我只是没有搞清楚如何“观察”的SQL数据库更改或如何有广播接收机和活动使用相同的可观测
答
这个答案还没有完成:
为了做我想要的,我至今实施了共享首选项监听器,并使用广播接收器和UI之间转发数据。我还使用新库实现了一个可观察对象,但我需要在较旧的设备上运行该应用程序,因此可观察对象不起作用。
private val listener = SharedPreferences.OnSharedPreferenceChangeListener { prefs, key ->
val value = prefs.getString(key, "")
when(key) {
"sms" -> smsStatus.text = value
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_smschecker)
//setSupportActionBar(toolbar)
getSharedPreferences("SMS_CHECKER", MODE_PRIVATE).registerOnSharedPreferenceChangeListener(listener)
}
然后在广播接收器:
val editor = context.getSharedPreferences("SMS_CHECKER", Context.MODE_PRIVATE).edit()
editor.putString("sms", DateFormat.getDateTimeInstance().format(Date()))
editor.apply()
的sqlite的监控仍在工作。
https://*.com/questions/7858398/best-practice-to-update-ui-from-broadcastreceiver-for-receive-new-sms –
的问题的答案使用意图或广播接收器。当警报触发或者短信收到时,我不需要启动我的应用程序,只需要用户界面在数据库打开的情况下与数据库同步。如果我无法弄清楚livedata和observables,我强烈考虑在我的UI中使用sharedprefs的监听器。 – Asitaka
可以请你显示代码吗?你有什么尝试? –