如何通知 UI 截击成功 MVVM 架构
How to notify UI on volley success MVVM architecture
我正在使用 mvvm 架构 我想在 volley post 请求成功时通知视图,我可以做的是在 [=14= 中实例化 ViewModel ] class 然后 post 值到 liveData
,但我想这不是一个好方法,因为我没有看到类似的做法。谁能建议我一个好的方法来 return 我对 ui 的回复,或者至少通知 post 请求已成功。
来自fragment/View我触发这个方法
// save data to api
checkInViewModel.updateEventPersonEntity(eventPersonsEntity);
ViewModel 将其转发给应用程序
public void updateEventPersonEntity(EventPersonsEntity eventPersonsEntity) {
mRepository.updateEventPersonEntity(eventPersonsEntity);
}
AppRepository.Java class
public void updateEventPersonEntity(EventPersonsEntity eventPersonsEntity) {
executor.execute(() -> {
// mDb.eventPersonsDao().update(eventPersonsEntity);
if (isNetworkAvailable(context)) {
post_updateEventPersonEntity(eventPersonsEntity);
}
});
}
private void post_updateEventPersonEntity(EventPersonsEntity eventPersonsEntity) {
Map<String, Object> params = new HashMap<>();
params.put("EventPersonId", eventPersonsEntity.getEventPersonId());
params.put("EventId", eventPersonsEntity.getEventId());
params.put("PersonId", eventPersonsEntity.getPersonId());
params.put("CashStart", parseDoubleToGerman(eventPersonsEntity.getCashStart()));
params.put("CashEnd", parseDoubleToGerman(eventPersonsEntity.getCashEnd()));
params.put("StartingTime", String.valueOf(eventPersonsEntity.getStartingTime()));
params.put("EndingTime", String.valueOf(eventPersonsEntity.getEndingTime()));
params.put("isChekcedIn", eventPersonsEntity.getIsCheckedIn());
params.put("isChekcedOut", eventPersonsEntity.getIsCheckedOut());
JSONObject objRegData = new JSONObject(params);
String eventPersonApi = APP_URL.EVENT_PERSONS_API + eventPersonsEntity.getEventPersonId();
RequestQueueSingleton.getInstance(context).objectRequest(eventPersonApi, Request.Method.PUT, this::onSuccess_updateEventPersonEntity, this::onError, objRegData);
}
private void onError(VolleyError error) {
Log.d(APP_REPOSITORY_TAG, "requestError: " + error);
}
private void onSuccess_updateEventPersonEntity(JSONObject jsonObject) {
// notify ui
}
您可以像对存储库中的成功响应逻辑那样执行此操作。只需创建新的回调接口:
interface OnEventUpdatedListener{
void eventUpdated();
}
然后,将您的方法更新为如下所示,将侦听器传递给执行工作的实际方法:
public void updateEventPersonEntity(EventPersonsEntity eventPersonsEntity, OnEventUpdatedListener listener) {
mRepository.updateEventPersonEntity(eventPersonsEntity, listener);
}
将这个传递给你的:
if (isNetworkAvailable(context)) {
post_updateEventPersonEntity(eventPersonsEntity, listener);
}
之后,在您的 onSuccess()
方法中只需调用:
private void onSuccess_updateEventPersonEntity(JSONObject jsonObject) {
listener.eventUpdated();
}
最后,如果您像这样调用存储库,您将在调用站点中获得更新时的信息:
updateEventPersonEntity(null, new OnEventUpdatedListener() {
@Override
public void EventUpdated() {
// Do your logic here
}
});
我正在使用 mvvm 架构 我想在 volley post 请求成功时通知视图,我可以做的是在 [=14= 中实例化 ViewModel ] class 然后 post 值到 liveData
,但我想这不是一个好方法,因为我没有看到类似的做法。谁能建议我一个好的方法来 return 我对 ui 的回复,或者至少通知 post 请求已成功。
来自fragment/View我触发这个方法
// save data to api
checkInViewModel.updateEventPersonEntity(eventPersonsEntity);
ViewModel 将其转发给应用程序
public void updateEventPersonEntity(EventPersonsEntity eventPersonsEntity) {
mRepository.updateEventPersonEntity(eventPersonsEntity);
}
AppRepository.Java class
public void updateEventPersonEntity(EventPersonsEntity eventPersonsEntity) {
executor.execute(() -> {
// mDb.eventPersonsDao().update(eventPersonsEntity);
if (isNetworkAvailable(context)) {
post_updateEventPersonEntity(eventPersonsEntity);
}
});
}
private void post_updateEventPersonEntity(EventPersonsEntity eventPersonsEntity) {
Map<String, Object> params = new HashMap<>();
params.put("EventPersonId", eventPersonsEntity.getEventPersonId());
params.put("EventId", eventPersonsEntity.getEventId());
params.put("PersonId", eventPersonsEntity.getPersonId());
params.put("CashStart", parseDoubleToGerman(eventPersonsEntity.getCashStart()));
params.put("CashEnd", parseDoubleToGerman(eventPersonsEntity.getCashEnd()));
params.put("StartingTime", String.valueOf(eventPersonsEntity.getStartingTime()));
params.put("EndingTime", String.valueOf(eventPersonsEntity.getEndingTime()));
params.put("isChekcedIn", eventPersonsEntity.getIsCheckedIn());
params.put("isChekcedOut", eventPersonsEntity.getIsCheckedOut());
JSONObject objRegData = new JSONObject(params);
String eventPersonApi = APP_URL.EVENT_PERSONS_API + eventPersonsEntity.getEventPersonId();
RequestQueueSingleton.getInstance(context).objectRequest(eventPersonApi, Request.Method.PUT, this::onSuccess_updateEventPersonEntity, this::onError, objRegData);
}
private void onError(VolleyError error) {
Log.d(APP_REPOSITORY_TAG, "requestError: " + error);
}
private void onSuccess_updateEventPersonEntity(JSONObject jsonObject) {
// notify ui
}
您可以像对存储库中的成功响应逻辑那样执行此操作。只需创建新的回调接口:
interface OnEventUpdatedListener{
void eventUpdated();
}
然后,将您的方法更新为如下所示,将侦听器传递给执行工作的实际方法:
public void updateEventPersonEntity(EventPersonsEntity eventPersonsEntity, OnEventUpdatedListener listener) {
mRepository.updateEventPersonEntity(eventPersonsEntity, listener);
}
将这个传递给你的:
if (isNetworkAvailable(context)) {
post_updateEventPersonEntity(eventPersonsEntity, listener);
}
之后,在您的 onSuccess()
方法中只需调用:
private void onSuccess_updateEventPersonEntity(JSONObject jsonObject) {
listener.eventUpdated();
}
最后,如果您像这样调用存储库,您将在调用站点中获得更新时的信息:
updateEventPersonEntity(null, new OnEventUpdatedListener() {
@Override
public void EventUpdated() {
// Do your logic here
}
});