MVVM - 从存储库 class 检索后在哪里格式化数据?

MVVM - Where to format data after retrieving from from repository class?

在我的 fragment class 中,我正在调用 ViewModelrepository 检索数据。我有一个简单的例子可以工作,现在我正在尝试格式化数据(例如,根据某个特定值更改每个用户的名称字符串)。但是我对在哪里格式化数据,以及如何格式化 LiveData 感到非常困惑?

//Fragment class

private void setListener() {
        //Listening for new data
        mViewModel.getMembersLiveData().observe(getViewLifecycleOwner(), new Observer<ResponseBody>() {
            @Override
            public void onChanged(ResponseBody responseBody) {
                if (responseBody != null) {
                    loadDataIntoRecycler(responseBody);
                } 
            }
        });

        //Call viewmodel to perform query
        int id = SharedPrefManager.getInstance(mContext).getId();
        mViewModel.getMembers(id);
}

在我的 ViewModel 中:

public class MembersViewModel extends AndroidViewModel {

    private LiveData<ResponseBody> mMembersLiveData;
    private UserRepo               mRepo;

    public MembersViewModel(@NonNull Application application) {
        super(application);
    }

    public void init() {
        mRepo = new UserRepo();
        mMembersLiveData = mRepo.getMembersLiveData();
    }

    //Call Repo class to query for data

    public void getMembers(int id) {
        mRepo.getMembers(id);
    }

    public LiveData<ResponseBody> getMembersLiveData() {
        return mMembersLiveData;
    }
}

存储库class:

public class UserRepo {

    private static final String TAG = "UserRepo";

    private MutableLiveData<ResponseBody> mMembersLiveData;
    private UserService                   mUserService;

    public UserRepo() {
        mMembersLiveData = new MutableLiveData<>();

        Retrofit retrofit = RetrofitClientInstance.getRetrofitInstance();
        mUserService = retrofit.create(UserService.class);
    }

    public MutableLiveData<ResponseBody> getMembersLiveData() {
        return mMembersLiveData;
    }


    public void getMembers(int id) {
        Call<ResponseBody> call = mUserService.GetUserFamilyMembers(id);
        call.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> response) {
                if (response.body() != null) {
                    mMembersLiveData.postValue(response.body());
                }
            }

            @Override
            public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) {
                mMembersLiveData.postValue(null);
            }
        });
    }
}

在上述情况下,请在 ViewModel.
内格式化/转换数据 这将导致干净的代码,并且您还可以获得 space 以供将来修改。

有许多不同的方式来转换实时数据。
请参考此 LINK 并导航到部分 Transform LiveData.
它包含有用且简单的示例,将为您提供开始的方向..