如何在截击成功时通知UI MVVM架构



我正在使用mvvm架构我想通知视图时,截击后请求是成功的,我能做的是在appRepository类实例化ViewModel,然后post值到liveData,但我想这不是一个好方法,因为我没有看到类似的做法。谁能建议我一个好的方法来返回我的响应ui,或者至少通知post请求已经成功。

从fragment/View触发此方法

// save data to api
checkInViewModel.updateEventPersonEntity(eventPersonsEntity);

ViewModel将其转发给存储库

public void updateEventPersonEntity(EventPersonsEntity eventPersonsEntity) {
mRepository.updateEventPersonEntity(eventPersonsEntity);
}

AppRepository.Java类

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
}
});

最新更新