【发布时间】:2018-12-15 20:44:04
【问题描述】:
我在活动的onCreate 方法中创建了视图模型的实例。
ticketViewModel = ViewModelProviders.of(this).get(TicketViewModel.class);
然后我有一个方法,AddTicket,它使用viewModel 来访问服务,并根据viewModel 的响应关闭加载动画。
public void addTicket(View view){
ticketViewModel.AddTicket(id).observe(this, response ->{
dismissLoadingAnimation();
}
现在添加工单后,用户可以再次按下Add Ticket按钮,addTicket()方法将被再次调用。
但是这次在 ViewModel 中定义的 observer 被调用了 2 次,导致 2 次网络调用和 2 次 dismissLoadingAnimation 执行。
如果我一直按addTicket 按钮,ViewModel keep 中定义的执行观察者的数量会增加。
这是我的视图模型代码。
public class TicketViewModel extends AndroidViewModel implements IServiceResponse {
MutableLiveData<String> mObservableResponse = new MutableLiveData<String>();
public MutableLiveData AddTicket(String id){
JsonObject jsonObject= new JsonObject();
jsonObject.addProperty("id", id);
NetworkUtility networkUtility= new NetworkUtility(this, ADD_TICKET);
networkUtility.hitService(URL, jsonObject, RequestMethods.POST);
return mObservableResponse;
}
@Override
public void onServiceResponse(String response, String callType){
if(serviceTag.equalsIgnoreCase(ADD_TICKET)){
mObservableResponse.setValue("success");
}
}
}
【问题讨论】:
-
我想你的意思不是要把“sectionViewModel.getSeats”放在“sectionViewMode.getData”里面,对吗?
-
@AhmedAshrafGamal : 首先我调用
sectionViewModel.getData,当我从这个方法得到结果时,我需要调用sectionViewModel.getSeats -
尝试记录而不是调试 Log.i("test","test");在线程内调试有时会给出错误的结果。
-
你确定你的服务没有调用 onResponse 两次吗?你能证明一下吗?
标签: android performance android-layout android-viewmodel