观察者模式在 Android MVVM 中不起作用

Observer pattern is not working in Android MVVM

我正在尝试使用 MVVM 根据我的 ViewModel 中的数据更新我的视图 我需要在 onCacheReception 方法中在区域发生变化时更新我的​​地图

视图模型

class MainViewModel constructor(application: Application) : AndroidViewModel(application),
    CacheListener {

    private val instance = Initializer.getInstance(application.applicationContext)
    private val _zones = MutableLiveData<List<Zone>>()
    val zones: LiveData<List<Zone>>
        get() = _zones

    init {
        CacheDispatcher.addCacheListener(this)
    }

    override fun onCacheReception() {
        val zonesFromDB: List<Zone>? = instance.fetchZonesInDatabase()

        _zones.value = zonesFromDB
    }
}

主要活动

class MainActivity : AppCompatActivity(), EasyPermissions.PermissionCallbacks, OnMapReadyCallback {
    private val mainViewModel: MainViewModel = ViewModelProvider(this).get(MainViewModel(application)::class.java)
    private lateinit var initializer: Initializer

    private lateinit var map: GoogleMap

    private val REQUEST_CODE_LOCATIONS: Int = 100
    private val permissionLocationsRationale: String = "Permissions for Fine & Coarse Locations"

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        if (checkForLocationsPermission()) {
            setUp()
            mapSetUp()
        }

        mainViewModel.zones.observe(this, Observer { zones ->
            zones.forEach {
                Log.i("YES DATA", "Data has been updated")
                val latLng = it.lat?.let { it1 -> it.lng?.let { it2 -> LatLng(it1, it2) } }
                val markerOptions = latLng?.let { it1 -> MarkerOptions().position(it1) }
                map.addMarker(markerOptions)
            }
        })
    }

我的日志从不显示,并且在调试时似乎没有在我的 ViewModel

中收到一些新数据时调用 mainView.zones.observe { }

onCacheReception()中替换:

_zones.value = zonesFromDB

作者:

_zones.postValue(zonesFromDB)

如果您的 onCacheReception() 函数是从工作线程调用的。