如何解决如何将所有Retrofit网络代码归为一个单独的类,并在不发生紧密耦合或内存泄漏的情况下传达响应? MVVM
我有一堂课,涉及使用翻新来处理所有联网操作,如下所示:
public class Networking{
public static void getCustomers(final PreviewCustomersViewModel previewCustomersViewModel) {
final Call<List<Customer>> getCustomersCall = service.getCustomers();
getCustomersCall.enqueue(new Callback<List<Customer>>() {
@Override
public void onResponse(@NonNull Call<List<Customer>> call,@NonNull Response<List<Customer>> response) {
if (response.isSuccessful()) {
previewCustomersViewModel.selectedDistCustomers = response.body();
previewCustomersViewModel.isCustomerListRetrieved.setValue(true);
//Send Broadcast Msg
} else {
previewCustomersViewModel.isCustomerListRetrieved.setValue(false);
//Send Broadcast Msg
}
}
@Override
public void onFailure(@NonNull Call<List<Customer>> call,@NonNull Throwable t) {
previewCustomersViewModel.isCustomerListRetrieved.setValue(false);
//Send Broadcast Msg
}
});
}
}
如您所见,我将ViewModel对象的引用传递给进行网络调用的方法,并在收到响应后,在该ViewModel中的Livedata对象上传达该引用。 (或使用广播消息)
但是,我认为这可能是ViewModel对象发生内存泄漏的原因,如果用户从一种活动转移到另一种活动,我会绕过该泄漏。
使用广播消息不需要我传递ViewModel对象,但这是一个好方法吗?
是否有更好的方法来实现这一目标?也许使用RxJava?还是应该将Retrofit代码保留在ViewModel中?我想实施最干净的解决方案。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。