Java 在服务方法中设置对象变量
我有两个域对象、消息和联系人:Java 在服务方法中设置对象变量,java,variables,rx-java,Java,Variables,Rx Java,我有两个域对象、消息和联系人: public class Contact { String name; } public class Message { String body; Contact contact; } 我正在填充消息的列表,并将它们显示给用户。异步检索每个消息的联系人信息,然后更新列表。我基本上就是这样设置的: listAdapter.setDataSet(listOfMessages); for (Message message : listOfM
public class Contact {
String name;
}
public class Message {
String body;
Contact contact;
}
我正在填充消息的列表
,并将它们显示给用户。异步检索每个消息的联系人信息,然后更新列表。我基本上就是这样设置的:
listAdapter.setDataSet(listOfMessages);
for (Message message : listOfMessages) {
fetchContactDetails(message);
}
...
fetchContactDetails(Message message) {
contactService
.fetchContactDetails(listOfMessages)
.subscribeOn... // observe, etc
.observe(new Observable<Contact>() {
onNext(Contact contact) {
message.setContact(contact);
list.notifyChanged(message);
}
});
listAdapter.setDataSet(listOfMessages);
for(消息:listOfMessages){
获取联系人详细信息(消息);
}
...
fetchContactDetails(消息){
联系服务
.fetchContactDetails(listOfMessages)
.subscribeOn…//观察等
.观察(新的可观察的){
onNext(联系人){
message.setContact(contact);
列表。通知已更改(消息);
}
});
这感觉像是很多代码,因为我可以只更新服务功能contactService.fetchContactDetails
中的每个消息联系人
。相反,使用服务方法修改传入的对象而不返回任何内容会让人觉得不干净
使用服务函数更新作为参数传入的对象而不返回任何内容,这是一种不好的做法吗
使用服务函数更新作为参数传入的对象而不返回任何内容,这是一种不好的做法吗
不,您可以通过使用Completable
来实现void
方法Observable
,但是在您的情况下,您仍然需要更新主线程上的UI,因此您将在主线程上订阅并处理onNext
(通过添加observeOn(AndroidSchedulers.mainThread())
。
因此,在本例中,您的方法似乎不是纯void
方法,它不返回任何内容,而是更新一些数据并将其返回到UI进行处理的方法
因此,我认为这是一个更一般的架构问题,即如何正确地分离代码。我将大胆地将模型/域逻辑收集在单独的可观察的,并让UI/表示处理UI更新
顺便说一句,使用from()
和flatMap()
然后,您可以控制enitre进程,比如在所有更新完成后执行某些操作,或者限制并行性或其他任何操作。我要添加的唯一一点是,在所有消息都有联系人之后,您应该调用notifyChanged一次;这将加快UI的速度,因为它只需要更新一次。它是什么。obesrve()?新的可观察的?我希望订阅
Observable.from(listOfMessages)
.flatMap(msg -> contactService.fetchContactDetails(msg))