如何使用视图模型,使用sqlite和广播接收器来更新UI?

如何使用视图模型,使用sqlite和广播接收器来更新UI?

问题描述:

我有一个用于测试连接的应用程序,它有一个20分钟的报警,并且必须与服务器具有独特的代码,并且服务器使用相同的代码,以确认发送短信。 我把所有的组件工作,但我不知道如何获得的唯一代码在UI自动更新。 报警写入每个请求到一个SQLite DB,我想的是自动更新用观察到的UI。如何使用视图模型,使用sqlite和广播接收器来更新UI?

我的项目是在科特林如果让任何区别。

基本上,我只是没有搞清楚如何“观察”的SQL数据库更改或如何有广播接收机和活动使用相同的可观测

+0

https://*.com/questions/7858398/best-practice-to-update-ui-from-broadcastreceiver-for-receive-new-sms –

+0

的问题的答案使用意图或广播接收器。当警报触发或者短信收到时,我不需要启动我的应用程序,只需要用户界面在数据库打开的情况下与数据库同步。如果我无法弄清楚livedata和observables,我强烈考虑在我的UI中使用sharedprefs的监听器。 – Asitaka

+0

可以请你显示代码吗?你有什么尝试? –

这个答案还没有完成:

为了做我想要的,我至今实施了共享首选项监听器,并使用广播接收器和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的监控仍在工作。