观察者在 activity 中被调用两次

observer gets called twice inside activity

在下面的代码中,我的观察者在将所有用户从参数存储到结果数组列表后被多次调用。我是观察模式的新手,所以我不确定我在这里做错了什么。

   private lateinit var usersObserver: Observer<List<User?>?>

   override fun onCreate(savedInstanceState: Bundle?) {
    usersObservar = Observer {
     userResults = populateResults(it)
   }
  }

  private fun populateResults(users: List<User?>): MutableList<UserModel> {
    val results: MutableList<UserModel> = ArrayList()
    for (user in users) {
        //Ignore potential null predictions
        if ((user != null) &&user.isUserNotNull()) {

           user.id?.let {
                searchResultsViewModel.getUserById(it).observe(
                    this,
                    Observer { ud ->
                        if (ud  != null && ud.hasNonNullLatLngOffsetMembers()) {
                           results.add(
                               UserModel(
                                    name = user.placeId!!,
                                    address = ud.address
                                    displayed = false
                                )
                            )
                        }
                        
                    }
                )
            }
        }
    }

    return results
}

我假设您多次呼叫 popoulateResults()。当您调用 searchResultsViewModel.getUserById(it).observe() 时,您会向它传递一个 Observer 的新实例,因此每次调用观察者时,都会执行观察者内部的代码。一个简单的解决方法应该是将观察者定义为 属性 函数之外的

val observer = Observer { your code }

并像

一样使用它
searchResultsViewModel.getUserById(it).observe(this, observer)