问题描述
在下面的代码中,将所有用户从参数存储到结果arraylist之后,多次调用我的观察者。我是新来观察模式的人,所以不确定在这里做错了什么。
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
}
解决方法
我假设您多次拨打from emp e join dept d on d.deptno = e.deptno
where e.job = 'SALESMAN'
and d.loc = 'LONDON'
。当您调用popoulateResults()
时,将其传递给searchResultsViewModel.getUserById(it).observe()
的新实例,因此每次调用观察者时,都会执行观察者内部的代码。一个简单的解决方法应该是将观察者定义为像这样的函数之外的属性
Observer
并像使用它
val observer = Observer { your code }