如何通知 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
        }
    });